Shared AI agent skills and MCP tooling for .NET applications, Orchard Core solutions, CrestApps OrchardCore modules, and CrestApps.Core libraries.
| Project | README | Purpose |
|---|---|---|
CrestApps.AgentSkills |
src/CrestApps.AgentSkills/README.md |
Canonical skill source roots grouped by owning project. |
CrestApps.AgentSkills.Mcp |
src/CrestApps.AgentSkills.Mcp/README.md |
Generic MCP skill engine for any .NET app. |
CrestApps.AgentSkills.OrchardCore |
src/CrestApps.AgentSkills.OrchardCore/README.md |
Dev-time package that copies Orchard Core and CrestApps OrchardCore skills into .agents/skills. |
CrestApps.AgentSkills.Mcp.OrchardCore |
src/CrestApps.AgentSkills.Mcp.OrchardCore/README.md |
Runtime MCP package that bundles Orchard Core and CrestApps OrchardCore skills. |
| Source root | Contents | Used by |
|---|---|---|
src/CrestApps.AgentSkills/orchardcore/ |
Framework-only Orchard Core skills that work out of the box without CrestApps modules | Orchard Core packages, orchardcore plugin |
src/CrestApps.AgentSkills/crestapps-orchardcore/ |
Skills for CrestApps.OrchardCore modules such as AI, MCP, A2A, and CrestApps docs |
Orchard Core packages, crestapps-orchardcore plugin |
src/CrestApps.AgentSkills/crestapps-core/ |
Skills dedicated to CrestApps.Core |
crestapps-core plugin |
CrestApps.AgentSkills.OrchardCore and CrestApps.AgentSkills.Mcp.OrchardCore intentionally bundle both orchardcore and crestapps-orchardcore so Orchard Core consumers get the full framework + CrestApps module experience from one package.
dotnet add package CrestApps.AgentSkills.Mcpbuilder.Services.AddMcpServer(mcp =>
{
mcp.AddAgentSkills();
});dotnet add package CrestApps.AgentSkills.OrchardCore
dotnet buildAfter the first build, the solution root contains:
.agents/
skills/
orchardcore/
orchardcore-content-types/
orchardcore-recipes/
...
crestapps-orchardcore/
orchardcore-ai/
orchardcore-ai-chat/
orchardcore-ai-mcp/
...
dotnet add package CrestApps.AgentSkills.Mcp.OrchardCorebuilder.Services.AddMcpServer(mcp =>
{
mcp.AddOrchardCoreSkills();
});Add this repository as a marketplace:
copilot plugin marketplace add CrestApps/CrestApps.AgentSkillsThen install the plugin you want:
| Plugin | Installs |
|---|---|
orchardcore |
Framework-only Orchard Core skills |
crestapps-orchardcore |
CrestApps OrchardCore module skills |
crestapps-core |
CrestApps.Core skills |
copilot plugin install orchardcore@crestapps-agentskills
copilot plugin install crestapps-orchardcore@crestapps-agentskills
copilot plugin install crestapps-core@crestapps-agentskillsIf you want the full Orchard Core plugin experience without copying files into your repository, install both orchardcore and crestapps-orchardcore.
The crestapps-orchardcore plugin is versioned from 2.0.0 onward because it now contains only CrestApps OrchardCore module skills instead of the previous mixed bundle.
Marketplace manifests live at:
.github/plugin/marketplace.json.claude-plugin/marketplace.json
Generated plugin bundles live at:
plugins/orchardcoreplugins/crestapps-orchardcoreplugins/crestapps-core
The Publish plugin bundles workflow recreates each plugins/*/skills directory from its matching source root and increments the version of each changed plugin in the marketplace manifests. Do not edit generated plugin bundles manually in normal pull requests, and do not copy skill contents into plugins/*/skills as part of source changes. Those generated files should arrive only through the workflow's follow-up PR.
.github/
├─ plugin/
│ └─ marketplace.json
├─ workflows/
│ ├─ publish-plugin.yml
│ └─ validate-plugin-bundle.yml
│
plugins/
├─ orchardcore/
│ ├─ README.md
│ └─ skills/
├─ crestapps-orchardcore/
│ ├─ README.md
│ └─ skills/
└─ crestapps-core/
├─ README.md
└─ skills/
src/
├─ CrestApps.AgentSkills/
│ ├─ orchardcore/
│ ├─ crestapps-orchardcore/
│ └─ crestapps-core/
├─ CrestApps.AgentSkills.Mcp/
├─ CrestApps.AgentSkills.OrchardCore/
└─ CrestApps.AgentSkills.Mcp.OrchardCore/
Each skill lives in its own directory and must contain SKILL.md with YAML front-matter:
---
name: orchardcore-content-types
description: Clear description of what this skill does and when to use it.
---
# Skill Title
Guidelines, code templates, and examples go here.namemust match the directory name exactlydescriptionis required- Optional references go under
references/ - Orchard Core framework skills belong in
src/CrestApps.AgentSkills/orchardcore/ - CrestApps OrchardCore module skills belong in
src/CrestApps.AgentSkills/crestapps-orchardcore/ - Direct CrestApps.Core skills belong in
src/CrestApps.AgentSkills/crestapps-core/
dotnet build -c Release -warnaserror /p:TreatWarningsAsErrors=true /p:RunAnalyzers=true /p:NuGetAudit=false
dotnet test -c Release --verbosity normalPowerShell
Get-ChildItem -Path "src\CrestApps.AgentSkills" -Directory | ForEach-Object {
Get-ChildItem -Path $_.FullName -Directory | ForEach-Object {
$skillFile = Join-Path $_.FullName "SKILL.md"
if (-not (Test-Path $skillFile)) { Write-Host "FAIL: $($_.FullName) missing SKILL.md" -ForegroundColor Red }
elseif ((Get-Content $skillFile -First 1) -ne "---") { Write-Host "FAIL: $($_.FullName) bad front-matter" -ForegroundColor Red }
else { Write-Host "OK: $($_.FullName)" -ForegroundColor Green }
}
}Bash
for root in src/CrestApps.AgentSkills/orchardcore src/CrestApps.AgentSkills/crestapps-orchardcore src/CrestApps.AgentSkills/crestapps-core; do
[ -d "$root" ] || continue
for dir in "$root"/*/; do
[ -d "$dir" ] || continue
if [ ! -f "$dir/SKILL.md" ]; then echo "FAIL: $dir missing SKILL.md"; continue; fi
if ! head -1 "$dir/SKILL.md" | grep -q "^---$"; then echo "FAIL: $dir bad front-matter"; continue; fi
echo "OK: $dir"
done
doneSee .github/CONTRIBUTING.md for contribution guidelines and the expected source-root placement for new skills.
This project is licensed under the MIT License.