Skip to main content
Glama
javiarmesto

Business Central MCP Server

by javiarmesto
README.md13 kB
# MCP_BusinessCentral - Servidor Model Context Protocol 🚀 Este proyecto implementa un **servidor MCP** para Microsoft Business Central, usando FastMCP y FastAPI, integrable con Claude Desktop y otros clientes AI. ## 🌐 Servidor Online Disponible **🎉 El servidor está desplegado y operativo en Azure App Service:** - **URL**: https://mcp-bc-javi-chb7bue4evbkeyb0.westeurope-01.azurewebsites.net - **Documentación API**: https://mcp-bc-javi-chb7bue4evbkeyb0.westeurope-01.azurewebsites.net/docs - **Estado**: ✅ 100% funcional con datos reales de Business Central - **Endpoints disponibles**: GET /customers, /items, /orders, POST /customers 📋 **Para usar el servidor desplegado**: Consulta el archivo `test-mcp-api.http` con ejemplos de todas las operaciones. ## 📋 ¿Qué es MCP? El **Model Context Protocol** (MCP) es un estándar abierto que permite a clientes AI acceder a herramientas, datos y servicios externos de forma segura y estructurada. MCP define una arquitectura cliente-servidor donde: - **MCP Host:** Cliente AI (Claude, Copilot, etc.) - **MCP Client:** Conector MCP en el host - **MCP Server:** Este proyecto (Python) expone herramientas y lógica de negocio - **Transporte:** JSON-RPC sobre stdin/stdout (local) o HTTP/SSE (remoto) Más información: [MCP servers en Microsoft Learn](https://learn.microsoft.com/en-us/azure/api-management/export-rest-mcp-server#about-mcp-servers) ## 🔒 Autenticación y Seguridad - Se recomienda usar Microsoft Entra ID (Azure AD) y OAuth2 para entornos de producción. - Consulta la [guía de autenticación para Business Central](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-develop-connect-apps). ### Ejemplo: Autenticación OAuth2 con Entra ID ```python import httpx def get_bc_token(tenant_id, client_id, client_secret, scope): url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token" data = { "grant_type": "client_credentials", "client_id": client_id, "client_secret": client_secret, "scope": scope } response = httpx.post(url, data=data) response.raise_for_status() return response.json()["access_token"] ``` Más información: [Guía de autenticación](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-develop-connect-apps) ## ⚠️ Manejo de límites y errores - Business Central impone límites de uso (rate limits) en sus APIs. Si recibes errores 429 (Too Many Requests) o 504 (Gateway Timeout), implementa lógica de reintentos y backoff. - Más información: [Límites de API en Business Central](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/api-reference/v2.0/dynamics-rate-limits). ### Ejemplo: Manejo de errores 429 y 504 en llamadas a la API ```python import httpx import time def call_bc_api_with_retry(url, headers, max_retries=5): retries = 0 backoff = 2 while retries < max_retries: response = httpx.get(url, headers=headers) if response.status_code == 429: wait = backoff ** retries print(f"Rate limit alcanzado. Reintentando en {wait}s...") time.sleep(wait) retries += 1 elif response.status_code == 504: print("Timeout de la API. Reintentando...") time.sleep(backoff) retries += 1 else: return response raise Exception("No se pudo completar la petición tras varios intentos") ``` Más información: [Límites de API en Business Central](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/api-reference/v2.0/dynamics-rate-limits) ## 🏅 Buenas prácticas de integración - Usa siempre los endpoints REST oficiales de Business Central para la integración. - Desacopla la lógica de negocio del transporte MCP. - Documenta claramente las herramientas expuestas y sus parámetros siguiendo el estándar MCP. - Consulta la [documentación de APIs REST de Business Central](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/webservices/api-overview). ## 🏗️ Estructura del Proyecto ``` 📁 MCP_BusinessCentral/ ├── requirements.txt # Dependencias Python ├── README.md # Documentación principal ├── .env # Variables de entorno (no se incluye en repo) ├── .venv/ # Entorno virtual Python ├── .github/copilot-instructions.md ├── .vscode/tasks.json # Tareas de VS Code ├── task1.txt # (Ejemplo o pruebas) └── 📁 bc_server/ # Paquete principal ├── BusinessCentralMCP.py # Servidor MCP (JSON-RPC) para BC ├── http_server.py # API REST (FastAPI) con OpenAPI/Swagger ├── setup_guide.py # Script de validación de entorno y credenciales ├── client.py # Cliente HTTP para la API de BC ├── config.py # Carga y validación de configuración └── __init__.py ``` ## 🎯 Servidores y APIs Implementados ### **1. BusinessCentralMCP.py - Servidor MCP (JSON-RPC)** Expone herramientas para interactuar con Business Central vía JSON-RPC: - **get_customers(limit)**: Lista clientes - **get_customer_details(customer_id)**: Detalle de un cliente - **get_items(limit)**: Lista artículos - **get_sales_orders(limit)**: Lista órdenes de venta - **create_customer(...)**: Crea un nuevo cliente ### **2. http_server.py - API REST (FastAPI)** Expone los mismos métodos anteriores vía HTTP REST, con documentación Swagger/OpenAPI. ### **3. setup_guide.py - Validación de entorno** Script para comprobar variables de entorno y conectividad con Azure AD y Business Central. ## 🛠️ Tecnologías Utilizadas - **FastMCP**: Framework para servidores MCP (JSON-RPC) - **FastAPI**: API REST moderna con documentación automática - **httpx**: Cliente HTTP asíncrono - **Pydantic**: Validación y serialización de datos - **python-dotenv**: Gestión de variables de entorno ## 🚀 Instalación y Puesta en Marcha ### 💻 Entorno Local ### 1. Crear entorno virtual ```powershell python -m venv .venv .venv\Scripts\Activate.ps1 ``` ### 2. Instalar dependencias ```powershell pip install -r requirements.txt ``` ### 3. Validar entorno y credenciales ```powershell python bc_server/setup_guide.py ``` ### 4. Lanzar el servidor MCP (JSON-RPC) ```powershell python -m bc_server.BusinessCentralMCP ``` ### 5. Lanzar la API REST (FastAPI) ```powershell uvicorn bc_server.http_server:app --reload --host 0.0.0.0 --port 8000 ``` Accede a la documentación interactiva en: http://localhost:8000/docs ### ☁️ Despliegue en Azure App Service **¿Quieres el servidor disponible online?** Consulta la **[Guía Completa de Despliegue](./DEPLOYMENT_GUIDE.md)** que incluye: - Proceso paso a paso para Azure App Service - Solución a todos los problemas encontrados - Configuración de variables de entorno - Scripts de automatización - Suite de testing completa **Resultado**: Servidor 100% operativo en Azure con integración real a Business Central. ## 🧪 Testing del Servidor Desplegado El archivo `test-mcp-api.http` contiene una suite completa de tests para validar todas las funcionalidades: ```http ### Health Check GET https://mcp-bc-javi-chb7bue4evbkeyb0.westeurope-01.azurewebsites.net/health ### Listar Clientes GET https://mcp-bc-javi-chb7bue4evbkeyb0.westeurope-01.azurewebsites.net/customers?limit=5 ### Crear Cliente POST https://mcp-bc-javi-chb7bue4evbkeyb0.westeurope-01.azurewebsites.net/customers Content-Type: application/json { "displayName": "Cliente Test", "email": "test@example.com" } ``` **Usar REST Client extension** de VS Code para ejecutar los tests directamente desde el editor. ## 🔧 Integración con Claude Desktop 1. Localiza el archivo de configuración de Claude Desktop: - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json` - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json` 2. Añade una entrada para el servidor MCP de Business Central, por ejemplo: ```json { "mcpServers": { "businesscentral-mcp": { "command": "C:/ruta/completa/.venv/Scripts/python.exe", "args": ["-m", "bc_server.BusinessCentralMCP"] } } } ``` 3. Reinicia Claude Desktop para que detecte el nuevo servidor MCP. ## 🛠️ Herramientas Disponibles (BusinessCentralMCP) | Herramienta | Descripción | Parámetros principales | |--------------------------|---------------------------------------------|---------------------------------------| | get_customers | Lista clientes de Business Central | limit (int) | | get_customer_details | Detalle de un cliente por ID | customer_id (str) | | get_items | Lista artículos | limit (int) | | get_sales_orders | Lista órdenes de venta | limit (int) | | create_customer | Crea un nuevo cliente | displayName, email, ... (ver código) | Consulta la documentación Swagger en `/docs` si usas la API REST. ## 🧪 Testing y Desarrollo - **Claude Desktop:** Configura el archivo de Claude Desktop y reinicia para probar las herramientas MCP. - **Modo desarrollo:** Usa los scripts de la carpeta `bc_server` para pruebas y debugging. - **API REST:** Ejecuta `uvicorn bc_server.http_server:app --reload` y prueba los endpoints en `http://localhost:8000/docs`. - **VS Code Task:** Usa la tarea "Run Python Script" para lanzar scripts rápidamente. ## 🎯 Casos de Uso Demostrados - Integración MCP con Business Central - Exposición de datos de clientes, artículos y órdenes - Creación de clientes desde herramientas AI - API REST y JSON-RPC para integración flexible ## 📚 Referencias oficiales y recursos útiles ### 📖 Documentación del Proyecto | Recurso | Descripción | |---------|-------------| | [Guía de Despliegue Azure](./DEPLOYMENT_GUIDE.md) | Proceso completo para llevar el servidor a producción | | [Suite de Tests](./test-mcp-api.http) | Validación completa de endpoints con REST Client | | [Configuración MCP](./bc_server/BusinessCentralMCP.py) | Servidor JSON-RPC para integración con AI clients | | [API REST](./bc_server/http_server.py) | Endpoints HTTP con documentación OpenAPI | ### 🌐 Enlaces Oficiales de Microsoft - [MCP servers en Microsoft Learn](https://learn.microsoft.com/en-us/azure/api-management/export-rest-mcp-server#about-mcp-servers) - [APIs REST de Business Central](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/webservices/api-overview) - [Desarrollar apps conectadas a Business Central](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-develop-connect-apps) - [Límites de API en Business Central](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/api-reference/v2.0/dynamics-rate-limits) - [Documentación MCP Oficial](https://modelcontextprotocol.io/llms-full.txt) - [FastMCP GitHub](https://github.com/jlowin/fastmcp) - [Claude Desktop](https://claude.ai/desktop) - [Pydantic Docs](https://docs.pydantic.dev/) - [Blog TechSphereDynamics](https://techspheredynamics.com) | Recurso | Enlace | |--------------------------------------------|------------------------------------------------------------------------| | MCP servers en Microsoft Learn | https://learn.microsoft.com/en-us/azure/api-management/export-rest-mcp-server#about-mcp-servers | | APIs REST de Business Central | https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/webservices/api-overview | | Autenticación y apps conectadas | https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-develop-connect-apps | | Límites de API | https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/api-reference/v2.0/dynamics-rate-limits | | Documentación MCP Oficial | https://modelcontextprotocol.io/llms-full.txt | | FastMCP GitHub | https://github.com/jlowin/fastmcp | | Claude Desktop | https://claude.ai/desktop | | Pydantic Docs | https://docs.pydantic.dev/ | | Blog TechSphereDynamics | https://techspheredynamics.com | --- **¡Desarrollado con visión y buen rollo!** 😉 Para cualquier duda, revisa los comentarios en el código o consulta la documentación oficial de MCP.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/javiarmesto/Lab3_1_MCP_BusinessCentral'

If you have feedback or need assistance with the MCP directory API, please join our Discord server