
SAP Business One MCP Server
Enables interaction with SAP Business One API through Azure Container Apps with VNet connectivity. Provides secure access to SAP data and operations through natural language interface.
README
SAP Business One MCP Server
SAP Business One MCP Server
Servidor MCP (Model Context Protocol) para integrar SAP Business One con Microsoft Copilot Studio.
##Características
-## Configuración
1. Variables de Entorn## Despliegue en AzureConexión ## Integración con Copilot St## Pruebas del Protocolo MCPdioersistente*## Estructura del Proyecto a SAP Business## TroubleshootingOne Service Layer API
- Creación de Sales Orders con validación completa
- Protocolo MCP Streamable compatible con Microsoft Copilot Studio
- Deployment en Azure Container Apps listo para producción
##Herramientas Disponibles
- sap_connect - Conectar a SAP Business One
- sap_status - Verificar estado de conexión
- sap_create_sales_order - Crear Sales Orders
##Requisitos
- Python 3.11+
- SAP Business One con Service Layer habilitado
- Variables de entorno configuradas
##Configuración
- Copiar
.env.example
a.env
:
cp .env.example .env
- Configurar variables de entorno en
.env
:
SAP_BASE_URL=https://your-sap-server:50000/b1s/v2
SAP_COMPANY_DB=YOUR_DB
SAP_USERNAME=your_user
SAP_PASSWORD=your_password
- Instalar dependencias:
pip install -r requirements.txt
- Ejecutar servidor:
python server.py
##Integración con Microsoft Copilot Studio
###1. Schema File
Usar sap-mcp-schema.yaml
como archivo de schema OpenAPI en Copilot Studio.
###2. Crear Custom Connector
- En Copilot Studio, ir a Tools → Add a tool → New tool → Custom connector
- Seleccionar Import OpenAPI file
- Subir el archivo
sap-mcp-schema.yaml
- Completar la configuración siguiendo la documentación oficial
###3. Configurar Host
Actualizar el host
en sap-mcp-schema.yaml
:
- Para desarrollo local:
localhost:8000
- Para producción:
your-domain.azurecontainerapps.io
##Deployment
###Azure Container Apps
- Configurar variables de entorno en Azure:
az containerapp env set-vars --name myapp-env --resource-group myresourcegroup --vars SAP_BASE_URL=https://your-sap-server:50000/b1s/v2 SAP_COMPANY_DB=YOUR_DB SAP_USERNAME=your_user SAP_PASSWORD=your_password
- Deploy usando el script:
./deploy-azure.ps1
###Docker
docker build -t sap-mcp-server .
docker run -p 8000:8000 --env-file .env sap-mcp-server
##Ejemplo de Uso
###Crear Sales Order
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sap_create_sales_order",
"arguments": {
"CardCode": "CUSTOMER_CODE",
"DocDueDate": "YYYYMMDD",
"DocCurrency": "USD",
"DocRate": 1.0,
"DocumentLines": [
{
"ItemCode": "ITEM_CODE",
"Quantity": "1",
"TaxCode": "TAX_CODE",
"UnitPrice": "100.00"
}
]
}
}
}
###Respuesta
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "Sales Order creada exitosamente:
{
\"status\": \"success\",
\"DocEntry\": 12345,
\"DocNum\": 1001,
\"CardCode\": \"CUSTOMER_CODE\",
\"CardName\": \"Customer Name\",
\"DocTotal\": 1000.0,
\"DocCurrency\": \"USD\",
\"DocRate\": 1.0
}"
}
]
}
}
##Health Check
curl http://localhost:8000/health
##Licencia
MIT License
##Contribuir
- Fork el proyecto
- Crear feature branch (
git checkout -b feature/AmazingFeature
) - Commit cambios (
git commit -m 'Add some AmazingFeature'
) - Push to branch (
git push origin feature/AmazingFeature
) - Abrir Pull Request
##Objetivo
Exponer herramientas de SAP Business One Service Layer API mediante el protocolo MCP streamable para que Microsoft Copilot Studio pueda consumirlas como un custom connector.
##Arquitectura
Microsoft Copilot Studio
↓ (HTTPS/JSON-RPC)
Azure Container Apps (Public Endpoint)
↓ (Service Layer API)
SAP Business One Server
##� Características
###Herramientas MCP Disponibles
sap_connect
: Conectar a SAP Business Onesap_status
: Verificar estado de conexiónsap_create_sales_order
: Crear Sales Orders con validación completa
###Recursos MCP Disponibles
sap://status
: Estado actual de la conexión SAP
###Endpoints HTTP
POST /mcp
: Endpoint principal para protocolo MCP streamableGET /health
: Verificación de salud del servidor
##🛠️ Configuración
###1. Variables de Entorno
Crea un archivo .env
basado en .env.example
:
cp .env.example .env
Completa las variables:
# SAP Business One Service Layer
SAP_BASE_URL=https://your-sap-server:50000/b1s/v1
SAP_COMPANY_DB=YOUR_COMPANY_DB
SAP_USERNAME=your_username
SAP_PASSWORD=your-password
###2. Desarrollo Local
# Instalar dependencias
pip install -r requirements.txt
# Ejecutar servidor
python server.py
El servidor estará disponible en http://localhost:8000
###3. Probar Localmente
# Verificar salud del servidor
curl http://localhost:8000/health
# Probar herramientas MCP
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
##☁️ Despliegue en Azure
###Prerequisitos
- Azure CLI instalado y configurado
- Azure Container Registry creado
- Permisos para crear Container Apps
###Despliegue Automatizado
# Ejecutar script de despliegue
.\deploy-azure.ps1 -ResourceGroupName "rg-mcp-sap" `
-ContainerAppEnvironmentName "cae-mcp-sap" `
-ContainerAppName "app-sap-mcp" `
-ContainerRegistryName "acrmcpsap" `
-VNetName "vnet-mcp-sap" `
-SubnetName "subnet-container-apps"
###Configurar Secrets en Azure
# Variables de entorno en Container App
az containerapp secret set --name app-sap-mcp --resource-group rg-mcp-sap \
--secrets sap-base-url="https://your-sap:50000/b1s/v1" \
sap-company-db="YOUR_COMPANY_DB" \
sap-username="your_username" \
sap-password="your-password"
##🔌 Integración con Copilot Studio
###1. Crear Custom Connector
- Ir a Power Platform Admin Center
- Seleccionar Custom Connectors → New custom connector → Import from OpenAPI file
- Subir el archivo
sap-mcp-schema.yaml
- Configurar la URL del host con tu Container App:
https://app-sap-mcp-test.bravewater-b67ade29.eastus.azurecontainerapps.io
###2. Configurar en Copilot Studio
- Abrir Copilot Studio
- Ir a Settings → Generative AI → Custom Actions
- Agregar el custom connector creado
- Las herramientas SAP aparecerán automáticamente como acciones disponibles
###3. Ejemplo de Uso en Copilot
Usuario: "Conecta a SAP y crea una orden de venta"
Copilot ejecutará:
1. sap_connect() - para conectar
2. sap_create_sales_order(CardCode="CUSTOMER", DocumentLines=[...]) - para crear la orden
##🧪 Pruebas del Protocolo MCP
###Ejemplo de Solicitud MCP
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "sap_create_sales_order",
"arguments": {
"CardCode": "CUSTOMER_CODE",
"DocumentLines": [
{
"ItemCode": "ITEM_CODE",
"Quantity": "1",
"UnitPrice": "100.00"
}
]
}
},
"id": 1
}
###Ejemplo de Respuesta MCP
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "Sales Order creada exitosamente: DocEntry 12345"
}
]
}
}
##📁 Estructura del Proyecto
MCP-SAP-main/
├── server.py # Servidor MCP principal con FastAPI
├── sap_client.py # Cliente para SAP Business One Service Layer
├── sap-mcp-schema.yaml # Schema OpenAPI para Custom Connector
├── deploy-azure.ps1 # Script de despliegue en Azure
├── Dockerfile # Imagen de contenedor
├── requirements.txt # Dependencias Python
├── .env.example # Plantilla de configuración
├── azure-container-app.yaml # Configuración de Container App
└── README.md # Este archivo
Desarrollo
###Agregar Nueva Herramienta
- Definir en
handle_list_tools()
:
Tool(
name="nueva_herramienta",
description="Descripción de la herramienta",
inputSchema={
"type": "object",
"properties": {
"param1": {"type": "string", "description": "Parámetro"}
},
"required": ["param1"]
}
)
- Implementar en
handle_call_tool()
:
elif name == "nueva_herramienta":
# Lógica de la herramienta
return [TextContent(type="text", text="Resultado")]
##🔍 Troubleshooting
###Problemas Comunes
-
Error de conexión SAP:
- Verificar variables de entorno
- Comprobar conectividad de red
- Validar credenciales
-
Container App no responde:
- Verificar logs:
az containerapp logs show --name app-sap-mcp --resource-group rg-mcp-sap
- Comprobar variables de entorno en Azure
- Verificar logs:
-
Copilot Studio no encuentra herramientas:
- Verificar schema OpenAPI
- Comprobar URL del host en custom connector
- Validar protocolo
mcp-streamable-1.0
###Logs y Debugging
# Ver logs locales
python server.py # Logs aparecen en consola
# Ver logs en Azure
az containerapp logs show --name app-sap-mcp --resource-group rg-mcp-sap --follow
# Probar endpoints manualmente
curl https://your-container-app.azurecontainerapps.io/health
curl -X POST https://your-container-app.azurecontainerapps.io/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Referencias
- Model Context Protocol (MCP)
- SAP Business One Service Layer API
- Microsoft Copilot Studio Custom Connectors
- Azure Container Apps
Contribución
- Fork el repositorio
- Crear rama feature:
git checkout -b feature/nueva-caracteristica
- Commit cambios:
git commit -am 'Agregar nueva característica'
- Push a la rama:
git push origin feature/nueva-caracteristica
- Crear Pull Request
##📄 Licencia
Este proyecto está bajo la Licencia MIT. Ver archivo LICENSE
para más detalles.
##🆘 Soporte
- Issues: GitHub Issues
- Documentación: Wiki del proyecto
- Contacto: Crear un issue para soporte técnico --secrets "sap-username=tu-usuario" "sap-password=tu-password"
##🔧 Configuración Manual
###Crear VNet y Subnet (si no existe)
```bash
# Crear VNet
az network vnet create \
--resource-group $ResourceGroupName \
--name $VNetName \
--address-prefix 10.0.0.0/16 \
--subnet-name $SubnetName \
--subnet-prefix 10.0.1.0/24
# Delegación para Container Apps
az network vnet subnet update \
--resource-group $ResourceGroupName \
--vnet-name $VNetName \
--name $SubnetName \
--delegations Microsoft.App/environments
###Configurar NSG para SAP
# Crear regla para permitir tráfico a SAP
az network nsg rule create \
--resource-group $ResourceGroupName \
--nsg-name nsg-containers \
--name AllowSAP \
--priority 100 \
--direction Outbound \
--access Allow \
--protocol Tcp \
--destination-port-ranges 50000 \
--destination-address-prefixes 10.0.0.0/16
##📊 Verificación
###Ver logs de la aplicación
az containerapp logs show \
--name $ContainerAppName \
--resource-group $ResourceGroupName \
--follow
###Verificar conectividad
# Entrar al contenedor para debug
az containerapp exec \
--name $ContainerAppName \
--resource-group $ResourceGroupName
# Verificar variables de entorno
echo $SAP_BASE_URL
##🔐 Seguridad
###Variables de entorno configuradas:
SAP_BASE_URL
: URL de tu SAP Business One APISAP_COMPANY_DB
: Base de datos de la compañíaSAP_USERNAME
: Usuario SAPSAP_PASSWORD
: Contraseña SAP (almacenada como secreto)
###Mejores prácticas:
- Credenciales almacenadas como secretos de Container Apps
- VNet isolation para comunicación privada con SAP
- Contenedor ejecutándose con usuario no-root
- Recursos limitados (CPU/Memory)
##🛠️ Troubleshooting
###Error de conectividad a SAP
- Verificar que SAP esté ejecutándose
- Verificar NSG rules
- Verificar que las IPs sean correctas
- Verificar credenciales
###Error de despliegue
- Verificar permisos en Azure
- Verificar que el nombre del Container Registry sea único
- Verificar que la VNet exista
###Ver logs detallados
az containerapp logs show \
--name $ContainerAppName \
--resource-group $ResourceGroupName \
--type console
##📞 Soporte
Para problemas específicos:
- Revisar logs de Container Apps
- Verificar conectividad de red
- Probar credenciales SAP desde Postman
- Verificar configuración de secretos
##🔄 Actualizaciones
Para actualizar la aplicación:
# Rebuild y redeploy
az acr build --registry $ContainerRegistryName --image "sap-mcp-server:latest" .
# Restart container app
az containerapp revision restart \
--name $ContainerAppName \
--resource-group $ResourceGroupName
推荐服务器

Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。