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

ClienteModoNotas
Claude DesktopstdioSoporte completo
Claude CodestdioSoporte completo
Cursorstdio o SSESoporte completo
VS Code (GitHub Copilot)stdio o SSERequiere modo agente de Copilot
Windsurfstdio o SSESoporte completo
Cualquier cliente MCPSSE/HTTPVía flag --port

Requisitos previos

RequisitoDetalles
Sistema operativoSolo Windows 10/11 (SAP GUI es solo para Windows)
Python3.10 o superior
SAP GUISAP GUI para Windows instalado
SAP ScriptingDebe 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)

  1. Abrir SAP Logon → Customize Local Layout (Alt+F12) → Options
  2. Ir a Accessibility & Scripting → Scripting
  3. ✅ Habilitar scripting
  4. ❌ Deshabilitar "Notificar cuando un script se adjunte a una sesión SAP GUI en ejecución"
  5. ❌ Deshabilitar "Notificar cuando un script abra una conexión"
  6. Pedir al administrador de BASIS que ejecute la transacción RZ11 → establecer sapgui/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_:

VariableValor predeterminadoDescripción
ROBOSAP_MCP_SAPLOGON_PATHC:\...\saplogon.exeRuta al ejecutable de SAP Logon
ROBOSAP_MCP_SAP_SERVERnullDescripción del servidor para conexión automática
ROBOSAP_MCP_SAP_CLIENTnullCliente SAP para inicio de sesión automático
ROBOSAP_MCP_SAP_USERnullUsuario SAP para inicio de sesión automático
ROBOSAP_MCP_SAP_PASSWORDnullContraseña SAP (nunca se registra)
ROBOSAP_MCP_PORTnull (stdio)Puerto para modo SSE
ROBOSAP_MCP_CAPS""Capacidades separadas por comas: screenshot,codegen,advanced
ROBOSAP_MCP_OUTPUT_DIR./sap_outputDirectorio de capturas de pantalla y registros
ROBOSAP_MCP_SCREENSHOT_ON_ERRORtrueCaptura automática de pantalla en fallos de herramientas

Herramientas disponibles

Núcleo (siempre cargado)

HerramientaDescripción
sap_openIniciar SAP Logon
sap_connect_to_serverConectar al servidor SAP
sap_connect_to_runningAdjuntar a una sesión SAP en ejecución
sap_get_session_infoSolo lectura: estado actual y título
sap_closeCerrar SAP
sap_execute_transactionEjecutar un código de transacción
sap_activate_tabHacer clic en una pestaña por etiqueta
sap_get_window_titleSolo lectura: título de la ventana actual
sap_select_menu_itemNavegar por la barra de menú
sap_send_keyEnviar tecla del teclado (Enter, F3, etc.)
sap_fill_text_fieldRellenar un campo por su etiqueta
sap_clear_text_fieldLimpiar un campo
sap_set_checkboxMarcar una casilla de verificación
sap_unset_checkboxDesmarcar una casilla de verificación
sap_select_radio_buttonSeleccionar un botón de opción
sap_push_buttonHacer clic en un botón por etiqueta
sap_button_existsSolo lectura: verificar si existe un botón
sap_read_text_fieldSolo lectura: leer el valor de un campo
sap_read_textSolo lectura: leer cualquier elemento de texto
sap_read_status_barSolo lectura: mensaje de la barra de estado de SAP
sap_count_table_rowsSolo lectura: número de filas de una tabla
sap_select_table_rowSeleccionar una fila de tabla
sap_read_table_cellSolo lectura: leer el valor de una celda
sap_fill_cellRellenar una celda de tabla
sap_double_click_cellDoble clic en una celda de tabla
sap_scroll_tableDesplazar tabla hacia arriba/abajo

--caps screenshot

HerramientaDescripción
sap_take_screenshotCapturar captura de pantalla de la ventana SAP

--caps codegen

HerramientaDescripción
sap_get_generated_scriptObtener el script acumulado de Robot Framework
sap_clear_scriptLimpiar el búfer de script

--caps advanced

HerramientaDescripción
sap_get_snapshotInstantá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:

  1. Llamar a sap_execute_transaction("/nME21N")
  2. Llamar a sap_get_window_title() → "Crear orden de compra"
  3. Llamar a sap_fill_text_field("Vendor", "100001")
  4. Llamar a sap_fill_text_field("Company Code", "1000")
  5. Llamar a sap_send_key("Enter") para aceptar el encabezado
  6. Llamar a sap_activate_tab("Item Overview")
  7. Llamar a sap_fill_cell("1", "Material", "ABC-001")
  8. Llamar a sap_fill_cell("1", "Quantity", "50")
  9. Llamar a sap_push_button("Save")
  10. 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.