mcpbeat Sign in

Template Discovery Agent Skill

> Helps find, inspect, and compare (at a high level) .NET project templates. Resolves natural-language project descriptions to ranked template matches with pre-filled parameters. parameters and constraints, understanding what a template produces before creating a project, resolving intent like "web API with auth" to concrete template + parameters. custom templates (use template-authoring), producing a detailed side-by-side comparison (use template-comparison), choosing cross-parameter defaults during creation (use template-smart-defaults), MSBuild or build issues (use dotnet-msbuild plugin), NuGet package management unrelated to template packages.

3k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
4898
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/dotnet/skills --skill template-discovery

The instruction itself

13 sections, as written by the author

Template Discovery

This skill helps an agent find, inspect, and select the right dotnet new template for a given task using dotnet new CLI commands for search, listing, and parameter inspection.

When to Use

  • User asks "What templates are available for X?"
  • User describes a project in natural language ("I need a web API with authentication")
  • User wants to compare templates or understand parameters before creating a project
  • User needs to know what a template produces (files, structure) before committing

When Not to Use

  • User wants to create a project — route to template-instantiation skill
  • User wants to author or validate a custom template — route to template-authoring skill
  • User wants a detailed side-by-side comparison of templates — route to template-comparison skill
  • User wants smart cross-parameter defaults during creation — route to template-smart-defaults skill
  • User is troubleshooting build issues — route to dotnet-msbuild plugin

> Answer first, confirm second — required, in this order. The Step 1 intent → template

> and keyword → parameter mappings are a complete answer on their own. **Your first action is

> to write** a concrete template + parameter recommendation (with a ready-to-run dotnet new

> command) from the mapping, before you run any dotnet new command. Only then use the CLI

> to *confirm* exact names/choices and update the answer. **Never make a dotnet new call your

> final action** — the engine's global mutex can make it fail with an empty "persistence"/"mutex"

> result under load, leaving the user nothing. Always close with the written recommendation, and

> never end a turn on a "let me confirm from the CLI…" teaser.

Inputs

| Input | Required | Description |

|-------|----------|-------------|

| User intent or keywords | Yes | Natural-language description or keywords (e.g., "web API", "console app", "MAUI") |

| Language preference | No | C#, F#, or VB — defaults to C# |

| Framework preference | No | Target framework (e.g., net10.0, net9.0) |

Workflow

> Do Step 1 and write the recommendation to the user before running Step 2–4 commands.

> Steps 2–4 only *confirm* the answer; a dotnet new failure must never leave the turn empty.

Step 1: Resolve intent to template candidates

Map the user's natural-language description to template short names and parameters using these mappings.

Intent → template short name(s):

| Intent / phrase | Template short name(s) |

|---|---|

| web api, web service, rest api, restful, api, minimal api | webapi |

| web app, web application | webapp, blazorserver |

| mvc | mvc |

| razor, razor pages | webapp |

| blazor, blazor web app | blazor |

| blazor server | blazorserver |

| blazor wasm, blazor webassembly | blazorwasm |

| grpc | grpc |

| signalr | webapi, webapp |

| console, console app, command line, cli | console |

| worker, background service, daemon, windows service | worker |

| class library, library, lib, nuget package | classlib |

| maui, mobile, cross-platform app, ios, android | maui |

| desktop | maui, wpf, winforms |

| wpf | wpf |

| winforms, windows forms | winforms |

| winui, winui3 | winui3 |

| test, unit test | xunit, nunit, mstest |

| xunit / nunit / mstest | xunit / nunit / mstest |

| solution | sln |

| aspire, .net aspire | aspire-starter, aspire |

| azure functions, function app, serverless | func |

| orleans | orleans |

| razor component, web component | razorcomponent |

| razor class library | razorclasslib |

| gitignore / editorconfig / nuget config / global json | gitignore / editorconfig / nugetconfig / globaljson |

Keyword → parameter:

| Keyword / phrase | Parameter | Value |

|---|---|---|

| authentication, auth, individual auth, individual accounts | --auth | Individual |

| windows auth | --auth | Windows |

| azure ad, entra id | --auth | SingleOrg |

| no auth, no authentication | --auth | None |

| controllers, with controllers | --use-controllers | (flag) |

| minimal api | (default) | — |

| aot, native aot | --aot | (flag) |

| docker, container | the template's Docker/container option | varies by template — confirm with --help (not all templates expose one) |

| net8 / .net 8 / dotnet 8 | --framework | net8.0 |

| net9 / .net 9 / dotnet 9 | --framework | net9.0 |

| net10 / .net 10 / dotnet 10 | --framework | net10.0 |

These are starting guesses. Always confirm the real parameter names/choices with dotnet new <template> --help, because parameter names vary by template (e.g., --auth vs --Authentication).

Some mapped short names are not present in a default SDK install — templates like maui, winui3, aspire-starter/aspire, func, and orleans typically require a workload (dotnet workload install <id>) and/or an additional template package (dotnet new install <package>). If a mapped short name does not appear in dotnet new list, fall back to dotnet new list/dotnet new search to find the right template and the package/workload that provides it before recommending it.

> Resilience — always answer, even if the CLI fails. The intent mapping above is a usable answer on its own. Run dotnet new commands sequentially, one at a time — the template engine uses a global mutex, so firing several dotnet new <template> --help/--dry-run calls concurrently can produce a transient "mutex"/"persistence" error and empty output. If a command fails, retry it once; if it still fails, fall back to this intent/parameter mapping and give the user a concrete recommendation, noting that the exact parameter names/choices could not be CLI-confirmed. Never end the turn with no answer because a CLI call errored.

Step 2: Search for templates

Use dotnet new search to find templates by keyword across both locally installed templates and NuGet.org:

dotnet new search blazor

Use dotnet new list to show only installed templates, with optional filters:

dotnet new list --language C# --type project
dotnet new list web

Step 3: Inspect template details

Use dotnet new <template> --help to get full parameter details for a specific template — parameter names, types, defaults, and allowed values:

dotnet new webapi --help

Step 4: Preview output

Use dotnet new <template> --dry-run to show what files and directories a template would create without writing anything to disk:

dotnet new webapi --name MyApi --auth Individual --dry-run

If the dry-run fails (transient "mutex"/"persistence" error), retry once; if it still fails, give a representative structure (template *family* and typical file kinds) and note it isn't CLI-confirmed. Do not invent specific values, choices, or file paths. When the dry-run succeeds, present the actual file list from its output faithfully — don't summarize, regroup, or invent files — and add a one-line purpose for the key entry points (e.g. Program.cs, App.razor).

Step 5: Present findings

Lead with the answer as a ready-to-run command, then justify it. Required shape:

> Use <template> — one-line why.

> `bash

> dotnet new <template> --name <Name> [--key params]

> `

Then add supporting detail:

  • Key parameters and recommended values (with the choices, e.g. --auth: None | Individual | SingleOrg | Windows)
  • What to expect (files created, project structure)
  • Any prerequisites — name the exact package to install (dotnet new install <id>), or say "no install needed — ships with the SDK" for a built-in template

An answer without a concrete, copy-pasteable command is what makes this skill tie with a plain reply — always give the command to run next.

Validation

  • [ ] At least one template match was found for the user's intent
  • [ ] Template parameters are explained with types and defaults
  • [ ] User understands what the template produces before proceeding to creation

Common Pitfalls

| Pitfall | Solution |

|---------|----------|

| Not searching NuGet for templates | If dotnet new list shows no matches, use dotnet new search <keyword> to find installable templates on NuGet.org. |

| Not checking template constraints | Some templates require specific SDKs or workloads. Use dotnet new <template> --help to surface constraints before recommending. |

| Recommending a template without previewing output | Always use dotnet new <template> --dry-run to confirm the template produces what the user expects. |

| A dotnet new call fails with a "mutex"/"persistence" error and you return nothing | These are transient (often from concurrent invocations). Run dotnet new calls sequentially, retry once, then fall back to the Step 1 intent mapping and still give the user a concrete answer. |

More Info

Other skills for the same job

different authors, same section of the catalogue
MCP Builder
by anthropics
vendor ×13

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

30k tokens scripts
Changelog Generator
by frostant
×9

Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.

774 tokens
Finishing A Development Branch
by ZhanlinCui
×7

Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup

1k tokens
MCP Builder
by JayZeeDesign
×7

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

37k tokens scripts
Vercel React Native Skills
by vercel-labs
vendor ×6

React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.

39k tokens
Vercel React Best Practices
by ratacat
×5

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

34k tokens
Next Best Practices
by vercel-labs
vendor ×4

Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling

20k tokens
Using Git Worktrees
by ZhanlinCui
×4

Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification

1k tokens

How to use it

Copy the folder

Take dotnet/template-discovery 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.