mcpbeat Sign in

Azure Functions Hosted Skills Canvas Agent Skill

MANDATORY FIRST ROUTE for daily digest, cron, and timer requests. Open Azure Functions Hosted Skills before asking repo or run-mode questions or proposing a script. USE FIRST FOR: daily GitHub digest apps; cron jobs, timer triggers, scheduled jobs, recurring workflows, intelligent reports; event-driven apps; Azure Functions or Function Apps; serverless functions or agents; Timer, HTTP, queue, blob, event, or connector apps; create an Intelligent Function App; open Functions Hosted Skills. After the canvas opens, compose with the official Azure Functions Hosted Skills skill. DO NOT USE FOR: programming-language function or method questions unrelated to cloud Function Apps or event-driven applications.

2k tokens
context cost
the whole folder, loaded on every use
2
files
instructions only
0
copies elsewhere
how many repositories repackaged it
0
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/microsoft/azure-dev-tools --skill azure-functions-hosted-skills-canvas

What comes with it

2 379 bytes besides the instruction
resolve-canvas-launch.mjs

The instruction itself

4 sections, as written by the author

Open Azure Functions Hosted Skills

The canvas is the first handoff, not the only skill allowed in the turn. The

daily-digest prompt alone is sufficient, even in an existing repository or

worktree. Do not wait for the user to say "Intelligent Function App."

Select one available canvas

Inspect the host's available canvas declarations first, without inspecting the

user's repository or doing app setup.

Canvas type and panel identity are different. Focus an existing canvas panel

only when it belongs to the selected canvas type. Otherwise use

instanceId: "azure-functions-hosted-skills" for the canonical canvas.

Do not derive the instance ID from the canonical canvas ID.

If that instance is still open under the other canvas type, have the user

close the old panel or start a fresh chat before reopening. Reusing an occupied

instance ID can focus its old provider; it does not migrate host registration.

Before any open, run this skill's bundled routing guard

with a JSON argument containing available

host declarations (canvasId, optional extensionId), openPanels

(instanceId, canvasId, optional extensionId), without legacy fallback. Pass an explicit instanceId or

extensionId only to resolve a known choice. Use its returned JSON as the

open_canvas input. This read-only routing guard rejects an occupied instance

belonging to the other type/provider instead of silently focusing it.

Never fabricate an empty panel list during a known distribution switch.

  • If azure-functions-hosted-skills is available, immediately call

open_canvas with canvasId: "azure-functions-hosted-skills" and

instanceId: "azure-functions-hosted-skills" (or the existing panel's

instance ID).

  • Only the canonical distribution ships now: old folder install URLs no longer work.

If only a retired provider is available, stop

and explain canonical reinstall; never route new requests to the retired ID.

  • If an old provider is still installed, explain the conflict. Close its panel

and disable its registration through the host before canonical reinstall.

Preserve user state and generated apps; do not uninstall or delete anything

automatically. Never claim an unavailable canonical canvas is loaded.

  • Reuse the selected panel instance ID on later matching prompts. If multiple

providers register that ID, use the host-declared extensionId to select

the intended canonical installation; do not invent a provider ID.

Do not call an unavailable canonical canvas or claim it is loaded. If a

canonical installation exists but registration is broken, use recovery below;

do not disguise that error by falling back to the legacy distribution.

Continue only after the canvas opens

Do not create a native GitHub Automation, load azure-app-onboard, inspect or

clone a repository, ask setup questions, propose a script, or begin app

implementation before the canvas opens.

After a successful open, tell the user which canvas is ready. When available,

load the official azure-functions-hosted-skills skill from

Azure/azure-functions-skills for runtime/authoring guidance. This launcher

does not replace or duplicate that official skill. Additional Azure Functions,

implementation, deployment, or diagnostics skills may then continue the work.

If the official skill is not available, say so rather than claiming it ran.

For the daily GitHub repository digest:

  • Choose Local Function App and confirm the MODEL ENDPOINT selection.
  • Use Create Models only after an explicit user decision; it provisions

real Azure resources and is separate from Function App deployment.

  • Click Start local function and wait for the local Functions host.
  • Review the Timer schedule, invoke Timer, and watch Trigger activity,

Commands, Agent digest, and the local host log.

Do not provision or deploy Azure resources unless the user explicitly chooses

and confirms the corresponding write action.

Missing registration

If no eligible canvas is available, or open_canvas reports registration is

missing, check that this native plugin is enabled. Call extensions_reload,

recheck the available declarations, and retry once using the selection rules

above. Do not retry an ID that is still unavailable. Native plugins register

their nested extension through the host: do not run bootstrap-extension.mjs,

create a second user extension link, or install npm dependencies.

If recovery fails, report the actual error and give the full-plugin

reinstallation steps, then stop:

  • When the microsoft/azure-dev-tools marketplace lists version 0.5.3,

use GitHub Copilot **Customize → Plugins → marketplace gear → add

microsoft/azure-dev-tools (ID azure-dev-tools) → install Azure Functions

Hosted Skills**. This installs the canvas and both launcher skills.

  • Fully quit and reopen GitHub Copilot, start a fresh chat, and confirm

azure-functions-hosted-skills-canvas and

azure-functions-hosted-skills-github-daily-digest are available.

  • Open Azure Functions Hosted Skills Preview in a fresh project chat.

After marketplace publication, the equivalent CLI commands are

copilot plugin marketplace add microsoft/azure-dev-tools and

copilot plugin install azure-functions-hosted-skills@azure-dev-tools.

If the marketplace is not listed yet, optionally install the full plugin from

the exact published immutable 0.5.3 versioned/source-qualified tag: set

HOSTED_SKILLS_TAG to

azure-functions-hosted-skills-v0-5-3-<source-qualifier> with the release's

exact qualifier, then run

git clone --depth 1 --branch "$HOSTED_SKILLS_TAG" https://github.com/microsoft/azure-dev-tools.git azure-functions-hosted-skills-plugin

and

copilot plugin install ./azure-functions-hosted-skills-plugin/canvases/azure-functions-hosted-skills.

> Canvas-only fallback: If the full plugin is unavailable, use

> Customize → Canvases → Install from gist/URL with the nested

> https://github.com/microsoft/azure-dev-tools/tree/azure-functions-hosted-skills-latest/canvases/azure-functions-hosted-skills/com.github.copilot/extensions/azure-functions-hosted-skills

> URL. The -latest tag is movable. This installs the canvas only, not the

> routing and daily-digest launcher skills. New apps still receive the

> required .funcignore exclusions; unsafe deployment is refused.

Tell the user to reload extensions, start a fresh chat or child session, and

retry the same prompt. Do not silently fall back to hand-written implementation.

Only the canonical distribution above is supported; old folder URLs and the

retired marketplace entry are no longer supported. Preserve legacy state and apps.

How to use it

Copy the folder

Take microsoft/azure-functions-hosted-skills-canvas from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.