🧠 Agent Skills + MCPs: check your BC extension health in VS Code 🔍

🧠 Agent Skills + MCPs: diagnostica tu extensión BC en VS Code 🔍

¿Qué es un Agent Skill?: Podría definirla como una carpeta de instrucciones, scripts y recursos que GitHub Copilot puede cargar e utilizar cuando el contexto es relevante para realizar una tarea especializada. 

Esto significaría que puedes tener muchos skills instalados sin penalizar el contexto, por lo que Copilot solo carga lo que es pertinente para cada requerimiento.

Los skills viven en la carpeta «.github/skills/«. Cada skill es una carpeta con un SKILL.md obligatorio y los recursos que necesite.

.github/skills/
my-custom-skill/
SKILL.md ← instructions + orchestration flow
tool-reference-1.md ← detailed tool reference
tool-reference-2.md ← detailed tool reference

El SKILL.md arranca con un frontmatter YAML. El description es crítico ya que es lo que Copilot lee en el Nivel 1 para decidir si el skill es relevante. Si no se describe bien los casos de uso, el skill no se activará.

---
name: my-custom-skill
description: "Does X for Y context. USE FOR: scenario A, scenario B.
DO NOT USE FOR: scenario C."
---

Ahora intentemos aplicar lo mencionado teóricamente, por lo que, crearemos un skill que orquesta YAMPI y BC Telemetry Buddy.

El skill define 4 pasos:

  • Leer app.json: extraer el id y la versión de la extensión como referencia base.
  • YAMPI: obtener los entornos activos del tenant, la versión instalada de la extensión en cada uno y si hay actualizaciones disponibles.
  • Buddy: consultar el catálogo de eventos y ejecutar una query del ciclo de vida filtrada por extensionId para detectar instalaciones, actualizaciones y fallos.
  • Reporte unificado: consolidar los resultados en dos tablas Markdown.

Cada uno de esos pasos vive en archivos separados dentro del skill:

.github/skills/
bc-extension-health/
SKILL.md ← instrucciones + flujo de orquestación
yampi-environments-reference.md ← referencia detallada de herramientas YAMPI
buddy-telemetry-reference.md ← referencia detallada de herramientas Buddy

Nuestro SKILL.md empieza con el frontmatter YAML siguiente:

---
name: bc-extension-health
description: "Analyze the health of the current Business Central extension
across all client environments. Combines YAMPI (d365bc-admin MCP) for
environment and version data, and BC Telemetry Buddy for lifecycle event
analysis. USE FOR: extension health check, check extension in production,
how is my extension deployed, extension version across environments,
extension install failures, extension update errors..."
---

Para YAMPI, el skill realiza las siguientes llamadas al MCP:

Tool: mcp_d365bc-admin_get_environment_informations
Parameters:
tenantId: <tenantId provided by user>
Tool: mcp_d365bc-admin_get_installed_apps
Parameters:
tenantId: <tenantId>
environmentName: <environmentName>

Para Buddy, el skill lanza una query KQL que cubre 6 eventos de ciclo de vida de las extensiones:

  • LC0010: Extensión instalada correctamente en un entorno.
  • LC0011: Fallo en la instalación de la extensión.
  • LC0016: Extensión desinstalada correctamente de un entorno.
  • LC0017: Fallo en la desinstalación de la extensión.
  • LC0022: Extensión actualizada correctamente a una nueva versión.
  • LC0023: Fallo en la actualización de la extensión.
traces
| where timestamp > ago(30d)
| where tostring(customDimensions.extensionId) == '<id from app.json>'
| where customDimensions.eventId in ('LC0010','LC0011','LC0016','LC0017','LC0022','LC0023')
| summarize count() by eventId = tostring(customDimensions.eventId),
environmentName = tostring(customDimensions.environmentName),
result = tostring(customDimensions.result)
| order by eventId asc

Con un único mensaje en el chat, Copilot detecta el skill, carga los tres archivos de referencia y extrae automáticamente los datos del app.json:

A continuación el skill orquesta las llamadas a ambos MCPs: YAMPI y Buddy, ejecutando varias herramientas en paralelo:

Finalmente, tras la query de telemetría, el skill consolida todo en un reporte unificado con el estado de la extensión en cada entorno:

El skill no ejecuta código propio, lo que hace es orquestar. Describe a Copilot qué hacer, en qué orden, con qué herramientas, y cómo presentar el resultado.

Espero que esta información te ayude.


🧠 Agent Skills + MCPs: check your BC extension health in VS Code 🔍

What is an Agent Skill?: I could define it as a folder of instructions, scripts, and resources that GitHub Copilot can load and use when the context is relevant to perform a specialized task.

This would mean that you can have many skills installed without penalizing the context, so Copilot only loads what is relevant for each requirement.

The skills reside in the «.github/skills/» folder. Each skill is a folder containing a required SKILL.md file and any necessary resources.

.github/skills/
my-custom-skill/
SKILL.md ← instructions + orchestration flow
tool-reference-1.md ← detailed tool reference
tool-reference-2.md ← detailed tool reference

The SKILL.md file starts with a YAML front matter. The description is critical because it’s what Copilot reads at Level 1 to decide if the skill is relevant. If the use cases aren’t described well, the skill won’t be activated.

---
name: my-custom-skill
description: "Does X for Y context. USE FOR: scenario A, scenario B.
DO NOT USE FOR: scenario C."
---

Now let’s try to apply what we’ve mentioned theoretically, so we’ll create a skill that orchestrates YAMPI and BC Telemetry Buddy.

The skill defines 4 steps:

  • Read app.json: Extract the extension’s ID and version as a baseline.
  • YAMPI: Obtain the tenant’s active environments, the installed extension version in each, and whether updates are available.
  • Buddy: Query the event catalog and run a lifecycle query filtered by extensionId to detect installations, updates, and failures.
  • Unified report: Consolidate the results into two Markdown tables.

Each of those steps resides in separate files within the skill:

.github/skills/
bc-extension-health/
SKILL.md ← instrucciones + flujo de orquestación
yampi-environments-reference.md ← referencia detallada de herramientas YAMPI
buddy-telemetry-reference.md ← referencia detallada de herramientas Buddy

Our SKILL.md starts with the following YAML frontmatter:

---
name: bc-extension-health
description: "Analyze the health of the current Business Central extension
across all client environments. Combines YAMPI (d365bc-admin MCP) for
environment and version data, and BC Telemetry Buddy for lifecycle event
analysis. USE FOR: extension health check, check extension in production,
how is my extension deployed, extension version across environments,
extension install failures, extension update errors..."
---

For YAMPI, the skill makes the following calls to the MCP:

Tool: mcp_d365bc-admin_get_environment_informations
Parameters:
tenantId: <tenantId provided by user>
Tool: mcp_d365bc-admin_get_installed_apps
Parameters:
tenantId: <tenantId>
environmentName: <environmentName>

For Buddy, the skill launches a KQL query that covers 6 extension lifecycle events:

  • LC0010: Extension successfully installed in an environment.
  • LC0011: Extension installation failed.
  • LC0016: Extension successfully uninstalled from an environment.
  • LC0017: Extension uninstallation failed.
  • LC0022: Extension successfully updated to a new version.
  • LC0023: Extension update failed.
traces
| where timestamp > ago(30d)
| where tostring(customDimensions.extensionId) == '<id from app.json>'
| where customDimensions.eventId in ('LC0010','LC0011','LC0016','LC0017','LC0022','LC0023')
| summarize count() by eventId = tostring(customDimensions.eventId),
environmentName = tostring(customDimensions.environmentName),
result = tostring(customDimensions.result)
| order by eventId asc

With a single message in the chat, Copilot detects the skill, loads the three reference files, and automatically extracts the data from app.json:

The skill then orchestrates calls to both MCPs: YAMPI and Buddy, executing several tools in parallel:

Finally, after the telemetry query, the skill consolidates everything into a unified report showing the status of the extension in each environment:

The skill doesn’t execute its own code; it orchestrates. It tells Copilot what to do, in what order, with what tools, and how to present the result.

I hope this information helps you.


Más información / More information:

Deja un comentario