AL CodeGen MCP Server
Generates AL code for Business Central directly from your IDE, enhancing developer efficiency by providing tools, prompts, and resources for code generation.
README
Desarrollo de un servidor MCP para Laberit Sistemas S.L.
Contenidos
Descripción breve del proyecto
El objetivo del proyecto consiste en planificar y desarrollar un servidor MCP que permita generar código AL, permitiendo a los desarrolladores aumentar su eficiencia sin necesidad de abandonar su entorno habitual de trabajo.
Para ello, se ha optado por emplear el lenguaje TypeScript y el SDK correspondiente proporcionado por el repositorio oficial dedicado al protocolo con el fin de desarrollar una versión "estándar" que además fuera fácilmente integrable y escalable.
Requisitos de instalación
-
Node.js (v16.0+; el desarrollo se ha realizado en la v24.14.1).
Nota: alternativamente, se puede emplear cualquier entorno de ejecución JS, como Bun.js o Deno, reemplazando los comandos pertinentes. -
Dependencias del proyecto:
- modelcontextprotocol/sdk: framework utilizado
- zod (v4): validador de formato, expone el formato de petición al agente
- handlebars: gestor de plantillas de generación de código
- dotenv: gestor de variables de entorno (ficheros .env). Permite ejecutar el servidor de forma independiente.
-
Para compilar el proyecto y ejecutar en local, será necesario instalar además:
- typescript: lenguaje TypeScript
- types/node: complemento de TypeScript para Node.js
- typedoc: generador de documentación para JavaScript/TypeScript
- typedoc-material-theme: estilo visual para la documentación complementario a TypeDoc
# Instala npm
npm install -g npm
# Versión de Node.js y npm
node -v
npm -v
# Instala las dependencias del proyecto (desde *package.json*)
npm install
Configuración y uso
Antes de comenzar con la configuración, se asume que debe haber instalado un agente que soporte integraciones MCP (Claude, Copilot, etc.) en el dispositivo que actúe a modo de cliente, ya sea independiente (aplicación propia) o esté integrado en un IDE (como VS Code o Google Antigravity).
En este listado se pueden ver los clientes disponibles. A priori, todos permiten el uso de herramientas (tools). Aún así, se recomienda que el agente escogido soporte también como mínimo peticiones (prompts) y recursos (resources) para no comprometer el funcionamiento de la aplicación conforme se vaya ampliando.
Configuración
Para que el agente reconozca el servidor, es necesario acceder al fichero de configuración MCP correspondiente. Dicho fichero suele ser accesible desde los ajustes de la aplicación desde la cual se invoca al agente.
Por ejemplo, en VS Code, la configuración MCP se encuentra en la ruta /.vscode/mcp.json desde la raíz del proyecto, mientras que en Claude se puede localizar en el fichero ~/AppData/Local/Packages/Claude_.../LocalCache/Roaming/Claude/claude_desktop_config.json.
Ejecución en remoto (recomendada)
Dentro de la clave de configuración para MCP en dicho fichero (cuyo nombre debería ser "servers", "mcpServers" o similar), añadir lo siguiente:
"al_codegen": {
"command": "npx",
"args": [
"-y",
"github:al426198/mcp-server"
],
"env": {
"AL_PROJECT_PATH": "./"
}
},
"al-object-id-ninja": {
"command": "npx",
"args": [
"-y",
"@vjeko.com/al-object-id-ninja-mcp"
]
},
"al": {
"command": "ruta/a/la/extensión/AL/bin/win32/altool.exe",
"args": ["launchmcpserver", "--transport", "stdio"]
}
-
El primer servidor se corresponde con este proyecto.
-
El segundo servidor pertenece a AL Object ID Ninja, es una utilidad para obtener IDs de objeto evitando colisiones.
-
El tercer servidor sirve para interactuar con BC, y viene incluido en la extensión para el lenguaje AL a partir de la 17.0 (Business Central 2026 Release Wave 1). Se debería utilizar la última versión disponible; de no haber ninguna instalada, el código generado podría no ser compilable.
En Windows, el comando correspondiente para hallar dicha ruta es:
(Get-ChildItem -Path ~/.vscode/extensions/ms-dynamics-smb.al-*/bin/win32/altool.exe | Sort-Object Name -Descending | Select-Object -First 1).FullName
Ejecución en local
En cambio, si se desea ejecutar el proyecto localmente, se debe cambiar:
- La configuración propia del servidor, indicando la ruta absoluta al fichero index.js:
"al_codegen": {
"command": "node",
"args": [ "ruta/absoluta/al/servidor/src/index.js" ],
"env": {
"AL_PROJECT_PATH": "ruta/absoluta/al/proyecto/AL"
}
}
- La variable
AL_PROJECT_PATH, que hace referencia a la ruta absoluta al proyecto AL sobre el cual se vaya a probar la aplicación, NO el proyecto destinado al servidor.
Realización de pruebas en local
Si se quiere probar el servidor de forma aislada, una forma de hacerlo es mediante la herramienta MCP Inspector. El servidor incluye el comando "show" a tal efecto, cuya sintaxis se muestra a continuación: <img width="604" height="29" alt="image" src="https://github.com/user-attachments/assets/6a84bbac-8420-4387-a993-a24af5007a8d" />
Se ejecuta mediante la orden: npm run show.
El comando realiza 3 tareas en el siguiente orden:
- Compila el proyecto a JS para actualizar los cambios en la carpeta
build. - Genera una clave secreta automáticamente y la guarda en la sesión del usuario. Esta clave se actualiza cada vez que se ejecuta el servidor.
- Ejecuta el programa MCP Inspector en el navegador. La primera vez pedirá instalar el paquete Node correspondiente.
Nota: por cuestiones de compatibilidad, también se debe definir la variable de entorno "AL_PROJECT_PATH" dentro de un fichero llamado .env en la raíz del proyecto, aunque en la versión final del servidor se podría omitir, puesto que no hace nada. Se puede utilizar cualquier valor.
Una vez hecho esto, debería abrirse en el navegador la siguiente pantalla (también debe haber un enlace a la misma en la terminal): <img width="948" height="439" alt="image" src="https://github.com/user-attachments/assets/7b1a836c-0476-49af-bb6d-2a7a41adfe08" />
Para conectarse al servidor, se debe hacer click en "Connect". Al utilizar el comando "show", MCP Inspector ya tiene la configuración necesaria para conectarse directamente al servidor MCP:
<img width="216" height="376" alt="image" src="https://github.com/user-attachments/assets/e7e313c7-2e61-4a8c-9cdd-c690523ab09a" />
Si todo ha ido bien, debería mostrarse la siguiente interfaz:
<img width="710" height="345" alt="image" src="https://github.com/user-attachments/assets/d139badb-a98b-42d2-9afc-c78f1429de18" />
Si no, es probable que no esté definida la variable de entorno "AL_PROJECT_PATH" o que no se encuentre donde se esperaba.
A partir de aquí, la idea es mostrar el listado de herramientas para ir probando, haciendo click sobre "Tools":
<img width="692" height="347" alt="image" src="https://github.com/user-attachments/assets/ad02c8c1-871b-41b7-91df-496292b24a93" />
Para ejecutar la herramienta, simplemente es necesario rellenar el formulario. Como este paso puede llegar a ser bastante tedioso, en la documentación extendida (y por ende, en el código), hay ejemplos de código comentados antes de cada una de ellas: <img width="424" height="160" alt="image" src="https://github.com/user-attachments/assets/db18fe92-2ade-45f9-8244-a6846d5b2571" />
La idea es ir copiando cada uno de estos fragmentos y pegándolos en los campos correspondientes del formulario. Se pueden modificar los datos como se desee, pero los JSON utilizados pueden llegar a ser algo complicados, aunque MCP Inspector suele indicar los errores de sintaxis (si falta un cierre, si sobra un carácter, etc.)
Por último, se debe hacer click en "Run Tool", que invocará el recurso del servidor y mostrará el resultado por pantalla. A continuación se muestra el resultado de ejecutar el ejemplo visto anteriormente:
<img width="330" height="329" alt="image" src="https://github.com/user-attachments/assets/89eb36a0-0f21-4e29-a7c5-ff8518f8a78f" />
Uso del servidor
Antes de emplear el servidor hay que comprobar que esté activo y funcionando. En VS Code se puede comprobar desde la configuración de agentes:
<img width="922" height="492" alt="image" src="https://github.com/user-attachments/assets/ce48cdc1-f338-4229-a4ac-93bd1bd1238c" />
Desde una aplicación externa (como Claude, véase abajo), se puede consultar desde el apartado "Conectores" o similar:
<img width="520" height="347" alt="image" src="https://github.com/user-attachments/assets/b3bf0e1f-24c8-46a4-a218-22acf34d8b8b" />
Una vez hecho esto, ya es posible hacer uso del servidor preguntando directamente al agente, aunque no es muy recomendable puesto que ante la falta de contexto puede saltarse algunas comprobaciones básicas como:
- La existencia de colisiones con la extensión actual (nombres e IDs de objeto).
- La compilación exitosa del código generado.
Existen 2 maneras de reducir el impacto de este problema:
- Desde el cliente, inyectando el contexto pertinente mediante ficheros "ocultos" que el agente lee en tiempo de ejecución (suelen terminar en -rules.md).
- Desde el servidor, añadir una petición a modo de guía o un recurso a modo de manual. Durante el desarrollo, se ha optado por utilizar una petición a modo de flujo de trabajo para realizar pruebas, que el usuario puede utilizar tanto desde VS Code...
<img width="350" height="232" alt="image" src="https://github.com/user-attachments/assets/a2bd3041-1c12-42bc-9c71-f6737e234b36" />
<img width="488" height="158" alt="image" src="https://github.com/user-attachments/assets/e3ba9413-b53d-40d1-b38e-dee1c6535be3" />
<img width="595" height="141" alt="image" src="https://github.com/user-attachments/assets/dd3d96dc-6824-4964-b27f-1a7ac7c24122" />
...como Claude o similares.
<img width="731" height="355" alt="image" src="https://github.com/user-attachments/assets/c7d4bcb7-11a4-4bbc-a621-afcfb3321681" />
<img width="620" height="635" alt="image" src="https://github.com/user-attachments/assets/4a341724-274c-4a63-b3f4-d30d02451688" />
Consideraciones
Puesto que esta herramienta está pensada exclusivamente para agentes de Inteligencia Artificial (IA), se debe tener en cuenta lo siguiente:
- Como usuario, es aconsejable hacer uso de un agente para acceder al servidor. Por tanto, es responsabilidad del usuario asegurarse de NO compartir datos personales al interactuar con dicho agente.
- Las respuestas proporcionadas pueden variar según el modelo empleado o tener errores. Aunque se han aplicado técnicas y herramientas para reducir su aparición en gran medida, el usuario debería igualmente validar el código generado.
- Cabe la posibilidad de que el agente desvaríe o decida no seguir los pasos propuestos (si existen alternativas que considera mejores); este hecho queda fuera del alcance del proyecto y no se puede evitar o prevenir al 100%.
Documentación adicional
Para obtener más información sobre el funcionamiento del servidor (herramientas y formatos de petición), se puede consultar la documentación extendida.
Autores
<a href="https://github.com/al426198" title="Daniel Ortiz Salvador"> <img src="https://avatars.githubusercontent.com/u/120575816?v=4" alt="Daniel Ortiz Salvador" width="120"/> </a>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.