Items marked (preview) in this article are currently in public preview. This preview is provided without a service-level agreement, and we don’t recommend it for production workloads. Certain features might not be supported or might have constrained capabilities. For more information, see Supplemental Terms of Use for Microsoft Azure Previews.
SKILL.md file you author once, store centrally in Foundry through the versioned Skills API, and then deliver to agents in two modes: attach to a toolbox so any MCP client can discover and load them alongside tools, or download directly into a Hosted or local agent project for direct injection into each session’s context. Skills are versioned: every update creates a new immutable version while the parent skill tracks a default_version. When you update a skill, you create a new version, test it, then promote it to default without changing any agent code.
In this article, you learn how to:
- Create versioned skills and manage them through the Skills API.
- List, get, and delete skills and skill versions.
- Download skill content for use in a Hosted agent.
- Attach skills to a toolbox.
Feature support
| Feature | REST API | Python | .NET | JavaScript | Toolbox | Hosted agent |
|---|---|---|---|---|---|---|
| Create skill version (JSON inline content) | ?? | ?? | ?? | ?? | N/A | N/A |
| Create skill version (ZIP file upload) | ?? | ?? | ?? | ?? | N/A | N/A |
| List, get, and delete skills and versions | ?? | ?? | ?? | ?? | N/A | N/A |
| Download skill content | ?? | ?? | ?? | ?? | N/A | N/A |
| Update skill default version | ?? | ?? | ?? | ?? | N/A | N/A |
| Attach skills to a toolbox | ?? | ?? | ?? | ?? | ?? | N/A |
Prerequisites
- An active Microsoft Foundry project.
- RBAC: Foundry User role on the Foundry project.
The Foundry RBAC roles were recently renamed. Foundry User, Foundry Owner, Foundry Account Owner, and Foundry Project Manager were previously named Azure AI User, Azure AI Owner, Azure AI Account Owner, and Azure AI Project Manager. You might still see the previous names in some places while the rename rolls out. The role IDs and core permissions are unchanged by the rename.
Author a skill
Skills follow the Agent Skills specification format. A skill is a Markdown file with a YAML front matter block:| Field | Required | Rules |
|---|---|---|
name | Yes | Skill name used as the URL path key. Lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen or contain consecutive hyphens. Maximum 64 characters. Pattern: ^[a-z0-9]([a-z0-9/-]*[a-z0-9])?$. Must be unquoted in YAML. |
description | Yes | One-liner shown in skill listings. Maximum 1,024 characters. Must be unquoted in YAML. |
| Body | Yes | Free Markdown. Becomes the skill’s injected instructions. |
- The
nameanddescriptionvalues must be unquoted in the YAML front matter. - Skill names follow the pattern
^[a-z0-9]([a-z0-9/-]*[a-z0-9])?$(lowercase, numbers, and hyphens, no leading/trailing hyphens, max 64 characters). Invalid names cause aninvalid_payloaderror on version creation.
greeting/SKILL.md, not SKILL.md at the root.
Attach skills to a toolbox (preview)
After you create skill versions, attach them to a toolbox version so any MCP client can discover and load them alongside tools from the same endpoint. Toolbox-based skill discovery is in preview and follows the Skills extension for the Model Context Protocol specification (SEP-2640).Skills attached to a toolbox must exist in the same Foundry project. Cross-project references aren’t supported.
resources/list once at startup to discover all attached skills, then resources/read to download the content. Any MCP client — GitHub Copilot, Claude Code, or your own agent harness — can consume skills this way without any Foundry SDK.
For REST, Python, .NET, JavaScript, and azd examples of adding skill references to a toolbox version, see the Attach skills to a toolbox section in the toolbox article. The Azure Developer CLI exposes skill references both declaratively (a skills: block in azd ai toolbox create --from-file) and imperatively (azd ai toolbox skill add, azd ai toolbox skill list, azd ai toolbox skill remove); changes don’t take effect for MCP clients until you promote the new version with azd ai toolbox publish.
Manage skills with the REST API
The Skills API is versioned: creating a skill version auto-creates the skill if it doesn’t exist yet. Each update creates a new immutableSkillVersion. The parent Skill object tracks default_version (the active version) and latest_version.
Skills endpoint: {FOUNDRY_PROJECT_ENDPOINT}/skills
Authentication: Bearer token from DefaultAzureCredential with scope https://ai.azure.com/.default.
Preview header: All Skills API calls require Foundry-Features: Skills=V1Preview.
| Object | Key fields | Description |
|---|---|---|
Skill | id, name, description, created_at, default_version, latest_version | The skill container. default_version points to the active version. |
SkillVersion | id, skill_id, name, version, description, created_at | An immutable snapshot of the skill content. |
Create a skill version
Creating a version auto-creates the parent skill if it doesn’t exist. After creating a version, call Update default version to make it the active version. You can create a version in two ways: submit the content directly as JSON viainline_content, or upload a ZIP archive containing a SKILL.md file.
Option 1: Create from inline content (JSON)
Use this option when you want to supply the skill’sinstructions text directly without packaging a file.
Example response (SkillVersion object):
Option 2: Create from a SKILL.md ZIP
Use multipart form upload when you have aSKILL.md file. The skill name comes from the {name} path parameter. Upload a single ZIP file or multiple individual files. The SKILL.md is parsed to populate the version description and instructions.
For ZIP uploads, the server extracts and validates the
SKILL.md content. For individual file uploads, files are validated as-is.SkillVersion object):
List skills
Example response:last_id with the after query parameter for forward cursor-based pagination.
Get a skill
Returns the skill metadata. Returns HTTP 404 if the skill doesn’t exist.Download skill content
Downloads the skill content as a ZIP archive. Use the default version endpoint to get the active version, or the version-specific endpoint to get a specific version.The response body is a binary ZIP archive (
Content-Type: application/zip).Delete a skill
Returns HTTP 200 on success:List skill versions
Example response:Get a skill version
Delete a skill version
Returns HTTP 200 on success:Update default version
Change which version the skill resolves to by default. Toolboxes and agents that reference the skill without pinning a version use thedefault_version.
Use skills in a hosted agent
In direct injection mode, you download skills from the Foundry Skills API into your agent project directory. The agent reads theSKILL.md files at startup and injects their content as extra system instructions for each session. This mode works without a toolbox and is appropriate when you want to bundle specific skill versions directly with your agent code.
For the alternative mode — where skills and tools share a single discoverable endpoint that any MCP client can reach — see Attach skills to a toolbox (preview).
The following walkthrough uses a GitHub Copilot SDK sample that reads SKILL.md files from a local skills/ directory. Use the Download skill content operation to pull skills from Foundry into this directory.
This sample requires a GitHub fine-grained personal access token (PAT) with Copilot requests: Read-only permission. Create one at github.com/settings/personal-access-tokens/new. Classic tokens (
ghp_) aren’t supported. Use a fine-grained PAT (github_pat_).Step 1: Initialize the agent project
Scaffold the project from the sample manifest:main.py, configuration files, and a sample joke skill:
main.py, the skill_directories parameter tells the Copilot SDK where to find skill files. Any SKILL.md in a subdirectory of skills/ is loaded as extra instructions when a session starts.
Step 2: Populate skills from Foundry
Use the Download skill content operation to pull the greeting skill from Foundry. Extract theSKILL.md from the downloaded ZIP and save it to skills/greeting/SKILL.md:
skills/greeting/SKILL.md.
The project now includes both skills: