ALM X++ MCP
D365 F&O: 90 herramientas de IA sobre más de 200K objetos, más de 25M referencias cruzadas, más de 24M traducciones de etiquetas.
Servidor MCP alojado
npx add-mcp 'https://api.almxpp.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
almxppmcp
Lanzador npx para el Cloud MCP de ALM XPP - un agente de IA para Dynamics 365 Finance & Operations que expone 90 herramientas a través de MCP.
Publicado en el registro oficial de MCP como
io.github.alimbenhelal-pro/alm-xpp-mcp.
El servidor responde desde un índice preconstruido del código estándar de D365 F&O: más de 200K objetos AOT, más de 1.3M fragmentos de código, más de 25M referencias cruzadas y más de 24M traducciones de etiquetas -- 392K identificadores de etiquetas renderizados en 74 idiomas.
Por qué un índice en lugar de un modelo de propósito general
Un modelo general responde preguntas sobre X++ desde lo que memorizó durante el entrenamiento. Este servidor responde desde una copia específica y versionada del código estándar de D365:
| Qué significa en la práctica | |
|---|---|
| Una versión conocida | El Cloud MCP responde desde la versión que el servidor ha indexado, no desde la tuya. La versión actualmente cargada se informa mediante GET /mcp -- verifícala antes de confiar en una respuesta sensible a la versión |
| Tu propia versión | Indexar la compilación exacta de tu entorno es para lo que sirve el Local MCP: se ejecuta junto a tu SDK de D365 e indexa el PackagesLocalDirectory en esa máquina. El Cloud MCP no puede hacer esto -- nunca ve tus binarios de plataforma |
| Rastreable | Cada resultado lleva el objeto AOT y el modelo del que proviene, para que puedas abrirlo en Visual Studio y verificarlo |
| Tus extensiones | Apunta D365-Custom-Model-Path a tus metadatos, o deja que indexe tu repositorio de Azure DevOps, y tu propio código se buscará junto al código estándar |
| Sin entrenamiento con tu código | Tus metadatos se indexan por sesión y se usan para responder tus llamadas. No se usan para entrenar nada |
Tres servidores, tres roles
Tres servidores MCP diferentes aparecen alrededor de D365 F&O. Este README siempre los llama por estos nombres:
| Nombre | Qué es | Cómo obtenerlo |
|---|---|---|
| Cloud MCP | El servidor alojado de ALM XPP: 90 herramientas sobre el código D365 indexado | este paquete -- npx almxppmcp |
| Local MCP | Se ejecuta en tu propia máquina de desarrollo, junto al SDK de D365: 121 herramientas, 36 de las cuales escriben archivos AOT, compilan X++, sincronizan la base de datos. También es el único que puede indexar la compilación de plataforma exacta de tu entorno, leyendo el PackagesLocalDirectory de esa máquina | componente licenciado por separado, contacta a alim@almxpp.com |
| Environment MCP | El servidor MCP de Dynamics 365 ERP de Microsoft, expuesto por tu propio entorno F&O, que sirve datos en vivo | habilitado dentro de D365FO, luego conectado directamente desde VS Code |
Este paquete npm cubre solo el Cloud MCP. El Local MCP está licenciado por separado, y el Environment MCP es de Microsoft -- tu cliente se conecta a él por su cuenta.
Requisitos
- Un token de API -- obtén uno en el panel de control
- Node.js >= 18, solo si usas el lanzador
npxdescrito más abajo
Configuración del Cliente MCP
El Cloud MCP es un servidor MCP HTTP transmisible en https://api.almxpp.com/mcp, autenticado con el
encabezado X-API-Key. Cualquier cliente que hable HTTP se conecta directamente -- sin Node.js, sin lanzador.
Las llamadas a herramientas se sirven solo en
api.almxpp.com.almxpp.comywww.almxpp.comalojan el sitio web; un POST JSON-RPC enviado allí se rechaza con un mensaje que indica la URL correcta. Solo cambia el host -- tu clave de API y los encabezados permanecen iguales.
VS Code / GitHub Copilot -- .vscode/mcp.json
{
"servers": {
"almxppmcp": {
"type": "http",
"url": "https://api.almxpp.com/mcp",
"headers": {
"X-API-Key": "YOUR_TOKEN"
}
}
}
}
Encabezados
X-API-Key es el único encabezado requerido. Los demás desbloquean las herramientas que necesitan tu propio contexto --
sin ellos, esas herramientas simplemente informan que no están configuradas.
| Encabezado | Desbloquea |
|---|---|
X-API-Key | Requerido. Tu token de API. Authorization: Bearer <token> también funciona. |
D365-Custom-Model-Path | Ruta absoluta a tus propios metadatos de extensión / ISV en la máquina que llama. Las herramientas de análisis leen desde aquí |
D365-Standard-Model-Path | Ruta absoluta a PackagesLocalDirectory, usada como referencia de solo lectura para objetos estándar |
DEVOPS_ORG_URL | Organización de Azure DevOps, p. ej. https://dev.azure.com/MyOrg |
DEVOPS_PROJECT | Nombre del proyecto de Azure DevOps. Requerido junto con DEVOPS_ORG_URL. |
DEVOPS_PAT | Token de Azure DevOps. Indexa tus propios metadatos X++ desde el repositorio y lee elementos de trabajo. |
DEVOPS_REPO | Repositorio que contiene los metadatos, cuando el proyecto tiene varios |
DEVOPS_BRANCH | Rama a indexar, por defecto main |
DEVOPS_METADATA_PATH | Carpeta dentro del repositorio que contiene el XML de AOT, por defecto Metadata |
D365FO-Url | URL base del entorno en vivo, para las herramientas odata_* y dmf_* |
D365FO-Tenant-Id | Inquilino de Entra de ese entorno |
D365FO-Client-Id | Aplicación de Entra registrada en D365FO bajo Aplicaciones de Microsoft Entra |
D365FO-Client-Secret | Secreto de esa aplicación |
AppInsights-Workspace-Id | Espacio de trabajo de Log Analytics, para las herramientas appinsights_* |
AppInsights-Tenant-Id | Inquilino de Entra de ese espacio de trabajo |
AppInsights-Client-Id | Aplicación de Entra con Log Analytics Reader en el espacio de trabajo |
AppInsights-Client-Secret | Secreto de esa aplicación |
Las credenciales del entorno en vivo y de telemetría también se pueden configurar para la sesión con
d365fo_set_connection y appinsights_set_connection, para que nunca estén en un archivo de configuración.
examples/vscode-mcp.full-headers.json une todo esto
y mantiene cada secreto fuera del archivo solicitándolo a través de inputs de VS Code.
El lanzador npx
Algunos clientes solo hablan stdio. El comando almxppmcp cubre ese caso: lee tu token, lo envía como
el encabezado X-API-Key, y retransmite el tráfico al Cloud MCP a través de stdio. No tiene dependencias --
solo el archivo único, además de lo que Node 18 ya proporciona.
npx almxppmcp --api-key YOUR_TOKEN
o establece la variable de entorno:
export ALMXPPMCP_API_KEY=YOUR_TOKEN
npx almxppmcp
--api-keyyALMXPPMCP_API_KEYson las dos formas de dar el token al lanzador. De cualquier manera, termina en el cable como el encabezado HTTPX-API-Key-- mismo token, capa diferente.
VS Code, si prefieres el lanzador -- .vscode/mcp.json
{
"servers": {
"almxppmcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "almxppmcp", "--api-key", "YOUR_TOKEN"]
}
}
}
Cursor -- .cursor/mcp.json
{
"mcpServers": {
"almxppmcp": {
"command": "npx",
"args": ["-y", "almxppmcp", "--api-key", "YOUR_TOKEN"]
}
}
}
Claude Desktop -- claude_desktop_config.json
{
"mcpServers": {
"almxppmcp": {
"command": "npx",
"args": ["-y", "almxppmcp", "--api-key", "YOUR_TOKEN"]
}
}
}
Consejo: reemplaza
YOUR_TOKENcon el token que se muestra en tu panel de control. Configúralo como variable de entorno para evitar codificarlo (la clave raíz esmcpServerspara Cursor y Claude Desktop,serverspara VS Code):{ "mcpServers": { "almxppmcp": { "command": "npx", "args": ["-y", "almxppmcp"], "env": { "ALMXPPMCP_API_KEY": "YOUR_TOKEN" } } } }
Variables de Entorno
| Variable | Descripción |
|---|---|
ALMXPPMCP_API_KEY | Tu token de API (alternativa a --api-key) |
ALMXPPMCP_SERVER_URL | Sobrescribe el endpoint de MCP (por defecto: https://api.almxpp.com/mcp) |
¿Qué herramientas están disponibles?
El Cloud MCP expone 90 herramientas en 14 categorías, listadas a continuación.
El Local MCP incluye las 85 de ellas que no dependen del índice en la nube, más 36 adicionales que deben ejecutarse junto a tu entorno D365 (compilación, implementación, sincronización de base de datos, escrituras en el espacio de trabajo) -- 121 herramientas en ese lado. En ambos servidores, el conjunto de herramientas es de 126 herramientas distintas.
| Categoría | Herramientas | Nombres |
|---|---|---|
| Búsqueda | 5 | search_d365_code, search_labels, batch_search, federated_search, search_context_docs |
| Recuperación | 6 | get_object_details, list_objects, list_custom_model_objects, get_object_context, compare_objects, get_menu_item_info |
| Relaciones e Impacto | 11 | find_related_objects, find_references, find_extensions, get_relation_graph, find_entity_for_table, find_callers, find_change_impact, find_event_handlers, find_relation_path, find_similar_implementations, trace_field_lineage |
| Calidad y Análisis | 7 | validate_best_practices, detect_performance_issues, find_error_patterns, fix_best_practice_violations, recommend_extension_strategy, suggest_edt, validate_object_naming |
| Seguridad y Licencias | 4 | trace_security_chain, trace_role_license_tree, get_security_coverage_for_object, generate_security_report |
| Generación de Código | 8 | generate_unit_test, suggest_refactoring, generate_diagram, generate_query, create_aot_object, generate_data_entity, generate_xpp_form, generate_xpp_template |
| Dominio Funcional | 2 | generate_fdd, explain_workflow |
| Diferenciadores | 2 | analyze_upgrade_impact, map_business_process |
| Actualización y Notas de Versión | 6 | resolve_client_profile, save_client_profile, list_release_note_inputs, prepare_release_note_context, generate_release_note_document, diff_model_versions |
| Entorno en Vivo | 5 | d365fo_set_connection, d365fo_clear_connection, odata_export_entity, odata_upsert_rows, get_data_entity_info |
| Migración de Datos | 7 | dmf, dmf_create_data_project, dmf_apply_entity_filter, dmf_import_file, dmf_export_package, dmf_get_job_status, dmf_transform_excel |
| Diagnóstico de Rendimiento | 4 | appinsights_set_connection, appinsights_clear_connection, appinsights_query, appinsights_diagnose_slowness |
| Orquestación e Informes | 6 | plan_and_execute, summarize_for_stakeholder, resolve_workspace_roots, resync_devops_index, healthcheck, get_output_page |
| Azure DevOps | 17 | ado_query_workitems, ado_analyze_workitem, ado_list_prs, ado_analyze_pr_impact, ado_gap_fit_analysis, ado_estimate_effort, ado_post_comment, ado_post_pr_comment, ado_create_task, ado_read_attachment, ado_update_workitem, ado_review_xpp_pr, ado_pr_dependency_map, ado_wiki_list, ado_wiki_get_page, ado_wiki_create_or_update_page, ado_wiki_delete_page |
Más allá de la búsqueda de código, las capacidades notables son:
- Impacto de actualización - compara dos versiones de D365 contra tus propias personalizaciones y produce el informe de regresión como Word y PowerPoint.
- Entorno en vivo - conéctate a un entorno en ejecución, lee y escribe registros reales a través de OData, ejecuta proyectos de Data Management.
- Diagnóstico de rendimiento - consulta la telemetría de Application Insights y obtén un diagnóstico clasificado de lo que realmente es lento.
- Azure DevOps - elementos de trabajo, solicitudes de extracción, wiki, desde el análisis hasta la revisión.
Referencia completa con parámetros y ejemplos de prompts: https://www.almxpp.com/docs
Qué hay en este repositorio
Este repositorio contiene solo el lado del cliente — el lanzador npx publicado en
npm como almxppmcp:
| Ruta | Propósito |
|---|---|
bin/almxppmcp.js | Resuelve la clave de API y la URL del servidor, luego conecta el stdio de tu cliente al Cloud MCP a través de HTTP -- sin paquetes de terceros involucrados |
server.json | Manifiesto del registro MCP |
El Cloud MCP en sí — índice, recuperación, las 90 herramientas y la capa de licencias — es
de código cerrado y se ejecuta en https://api.almxpp.com/mcp. El lanzador nunca ve
tu código: reenvía solicitudes a través de HTTPS con el token que proporcionas.
Licencia
MIT