sapient-mcp
MCP para automatizar SAP GUI
Documentación
SAPient MCP
Automatización inteligente de SAP GUI para agentes de IA
Un servidor MCP (Model Context Protocol) listo para producción que permite a los LLMs (Claude, Copilot, Cursor, etc.) automatizar SAP GUI utilizando la librería RoboSAPiens.
Clientes MCP compatibles
| Cliente | Modo | Notas |
|---|---|---|
| Claude Desktop | stdio | Soporte completo |
| Claude Code | stdio | Soporte completo |
| Cursor | stdio o SSE | Soporte completo |
| VS Code (GitHub Copilot) | stdio o SSE | Requiere modo agente de Copilot |
| Windsurf | stdio o SSE | Soporte completo |
| Cualquier cliente MCP | SSE/HTTP | Vía flag --port |
Requisitos previos
| Requisito | Detalles |
|---|---|
| Sistema operativo | Solo Windows 10/11 (SAP GUI es solo para Windows) |
| Python | 3.10 o superior |
| SAP GUI | SAP GUI para Windows instalado |
| SAP Scripting | Debe estar habilitado en el servidor (RZ11: sapgui/user_scripting=TRUE) Y en la configuración del cliente SAP Logon |
Habilitar SAP GUI Scripting (configuración única)
- Abrir SAP Logon →
Customize Local Layout (Alt+F12)→Options - Ir a
Accessibility & Scripting→Scripting - ✅ Habilitar scripting
- ❌ Deshabilitar "Notificar cuando un script se adjunte a una sesión SAP GUI en ejecución"
- ❌ Deshabilitar "Notificar cuando un script abra una conexión"
- Pedir al administrador de BASIS que ejecute la transacción
RZ11→ establecersapgui/user_scripting=TRUE
Instalación
# Clone the repo
git clone https://github.com/yourorg/sapient-mcp.git
cd sapient-mcp
# Install (using pip or uv)
pip install -e .
# Or with uv (recommended)
uv pip install -e .
Inicio rápido
Opción A — Modo stdio (clientes locales)
SAPient MCP funciona con cualquier cliente compatible con MCP. Elige el tuyo a continuación.
Claude Desktop
Editar %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"sapient": {
"command": "python",
"args": ["-m", "sapient_mcp"],
"env": {
"SAPIENT_MCP_SAPLOGON_PATH": "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.exe",
"SAPIENT_MCP_CAPS": "screenshot,codegen,advanced",
"SAPIENT_MCP_OUTPUT_DIR": "C:\\sapient_output"
}
}
}
}
Claude Code (CLI)
claude mcp add sapient python -m sapient_mcp \
-- --caps screenshot,codegen,advanced
O editar ~/.claude/mcp.json / .claude/mcp.json en la raíz de tu proyecto:
{
"mcpServers": {
"sapient": {
"command": "python",
"args": ["-m", "sapient_mcp", "--caps", "screenshot,codegen,advanced"],
"env": {
"SAPIENT_MCP_SAPLOGON_PATH": "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.exe",
"SAPIENT_MCP_OUTPUT_DIR": "C:\\sapient_output"
}
}
}
}
Cursor
Ir a Cursor Settings → MCP → Add new MCP Server → escribir command, luego ingresar:
python -m sapient_mcp --caps screenshot,codegen,advanced
O editar ~/.cursor/mcp.json:
{
"mcpServers": {
"sapient": {
"command": "python",
"args": ["-m", "sapient_mcp", "--caps", "screenshot,codegen,advanced"],
"env": {
"SAPIENT_MCP_SAPLOGON_PATH": "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.exe",
"SAPIENT_MCP_OUTPUT_DIR": "C:\\sapient_output"
}
}
}
}
VS Code (GitHub Copilot)
Instalar el servidor MCP mediante la CLI de VS Code:
code --add-mcp '{"name":"sapient","command":"python","args":["-m","sapient_mcp","--caps","screenshot,codegen,advanced"]}'
O agregar a .vscode/mcp.json en tu espacio de trabajo:
{
"servers": {
"sapient": {
"type": "stdio",
"command": "python",
"args": ["-m", "sapient_mcp", "--caps", "screenshot,codegen,advanced"],
"env": {
"SAPIENT_MCP_SAPLOGON_PATH": "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.exe",
"SAPIENT_MCP_OUTPUT_DIR": "C:\\sapient_output"
}
}
}
}
Windsurf
Editar ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"sapient": {
"command": "python",
"args": ["-m", "sapient_mcp", "--caps", "screenshot,codegen,advanced"],
"env": {
"SAPIENT_MCP_SAPLOGON_PATH": "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.exe",
"SAPIENT_MCP_OUTPUT_DIR": "C:\\sapient_output"
}
}
}
}
Nota: En modo stdio, SAPient MCP nunca escribe en stdout o stderr — todos los registros van únicamente al archivo de registro. Esto es necesario para una comunicación JSON-RPC limpia en todos los clientes.
Opción B — Modo SSE/HTTP (remoto / CI / multiusuario)
Ideal cuando la máquina SAP está separada de donde se ejecuta el cliente de IA, o cuando varios desarrolladores quieren compartir una única instancia de SAPient.
Ejecuta el servidor en tu máquina SAP con Windows:
python -m sapient_mcp --port 8765 --caps screenshot,codegen,advanced
Luego apunta cualquier cliente MCP al endpoint HTTP:
{
"mcpServers": {
"sapient": {
"url": "http://sap-windows-machine:8765/mcp"
}
}
}
Esto funciona de manera idéntica en Claude Desktop, Claude Code, Cursor, VS Code, Windsurf y cualquier otro cliente compatible con MCP.
Opción C — Archivo de configuración
python -m sapient_mcp --config C:\sap_config.json
Variables de entorno
Todos los ajustes pueden proporcionarse como variables de entorno con el prefijo ROBOSAP_MCP_:
| Variable | Valor predeterminado | Descripción |
|---|---|---|
ROBOSAP_MCP_SAPLOGON_PATH | C:\...\saplogon.exe | Ruta al ejecutable de SAP Logon |
ROBOSAP_MCP_SAP_SERVER | null | Descripción del servidor para conexión automática |
ROBOSAP_MCP_SAP_CLIENT | null | Cliente SAP para inicio de sesión automático |
ROBOSAP_MCP_SAP_USER | null | Usuario SAP para inicio de sesión automático |
ROBOSAP_MCP_SAP_PASSWORD | null | Contraseña SAP (nunca se registra) |
ROBOSAP_MCP_PORT | null (stdio) | Puerto para modo SSE |
ROBOSAP_MCP_CAPS | "" | Capacidades separadas por comas: screenshot,codegen,advanced |
ROBOSAP_MCP_OUTPUT_DIR | ./sap_output | Directorio de capturas de pantalla y registros |
ROBOSAP_MCP_SCREENSHOT_ON_ERROR | true | Captura automática de pantalla en fallos de herramientas |
Herramientas disponibles
Núcleo (siempre cargado)
| Herramienta | Descripción |
|---|---|
sap_open | Iniciar SAP Logon |
sap_connect_to_server | Conectar al servidor SAP |
sap_connect_to_running | Adjuntar a una sesión SAP en ejecución |
sap_get_session_info | Solo lectura: estado actual y título |
sap_close | Cerrar SAP |
sap_execute_transaction | Ejecutar un código de transacción |
sap_activate_tab | Hacer clic en una pestaña por etiqueta |
sap_get_window_title | Solo lectura: título de la ventana actual |
sap_select_menu_item | Navegar por la barra de menú |
sap_send_key | Enviar tecla del teclado (Enter, F3, etc.) |
sap_fill_text_field | Rellenar un campo por su etiqueta |
sap_clear_text_field | Limpiar un campo |
sap_set_checkbox | Marcar una casilla de verificación |
sap_unset_checkbox | Desmarcar una casilla de verificación |
sap_select_radio_button | Seleccionar un botón de opción |
sap_push_button | Hacer clic en un botón por etiqueta |
sap_button_exists | Solo lectura: verificar si existe un botón |
sap_read_text_field | Solo lectura: leer el valor de un campo |
sap_read_text | Solo lectura: leer cualquier elemento de texto |
sap_read_status_bar | Solo lectura: mensaje de la barra de estado de SAP |
sap_count_table_rows | Solo lectura: número de filas de una tabla |
sap_select_table_row | Seleccionar una fila de tabla |
sap_read_table_cell | Solo lectura: leer el valor de una celda |
sap_fill_cell | Rellenar una celda de tabla |
sap_double_click_cell | Doble clic en una celda de tabla |
sap_scroll_table | Desplazar tabla hacia arriba/abajo |
--caps screenshot
| Herramienta | Descripción |
|---|---|
sap_take_screenshot | Capturar captura de pantalla de la ventana SAP |
--caps codegen
| Herramienta | Descripción |
|---|---|
sap_get_generated_script | Obtener el script acumulado de Robot Framework |
sap_clear_script | Limpiar el búfer de script |
--caps advanced
| Herramienta | Descripción |
|---|---|
sap_get_snapshot | Instantánea JSON estructurada de la ventana actual |
Ejemplo de conversación con LLM
Tú: Crear una orden de compra para el proveedor 100001, código de compañía 1000, con 50 unidades del material ABC-001
SAPient guiará al LLM para:
- Llamar a
sap_execute_transaction("/nME21N") - Llamar a
sap_get_window_title()→ "Crear orden de compra" - Llamar a
sap_fill_text_field("Vendor", "100001") - Llamar a
sap_fill_text_field("Company Code", "1000") - Llamar a
sap_send_key("Enter")para aceptar el encabezado - Llamar a
sap_activate_tab("Item Overview") - Llamar a
sap_fill_cell("1", "Material", "ABC-001") - Llamar a
sap_fill_cell("1", "Quantity", "50") - Llamar a
sap_push_button("Save") - Llamar a
sap_read_status_bar()→ "Orden de compra 4500001234 creada"
Estructura del proyecto
sapient-mcp/
├── pyproject.toml
├── README.md
├── sap_config.json # Example config file
├── claude_desktop_config.json # Example Claude Desktop config
└── src/
└── sapient_mcp/
├── __init__.py
├── __main__.py # Entry point + CLI arg parsing
├── config.py # Pydantic settings (env/file/CLI)
├── session.py # SAPSessionManager singleton
└── server.py # FastMCP server + all 27 tool definitions
Registros
Los registros se escriben en {output_dir}/sapient_mcp.log.
En modo stdio, los registros nunca van a stdout/stderr (romperían JSON-RPC). En modo SSE, los registros también aparecen en stderr.