sapient-mcp

MCP para automatizar SAP GUI

Documentação

SAPient MCP

Automação inteligente de SAP GUI para agentes de IA

Um servidor Model Context Protocol (MCP) pronto para produção que permite que LLMs (Claude, Copilot, Cursor, etc.) automatizem o SAP GUI usando a biblioteca RoboSAPiens.

Clientes MCP compatíveis

ClienteModoObservações
Claude DesktopstdioSuporte completo
Claude CodestdioSuporte completo
Cursorstdio ou SSESuporte completo
VS Code (GitHub Copilot)stdio ou SSERequer modo agente do Copilot
Windsurfstdio ou SSESuporte completo
Qualquer cliente MCPSSE/HTTPVia flag --port

Pré-requisitos

RequisitoDetalhes
SOApenas Windows 10/11 (SAP GUI é exclusivo para Windows)
Python3.10 ou mais recente
SAP GUISAP GUI para Windows instalado
SAP ScriptingDeve estar habilitado no servidor (RZ11: sapgui/user_scripting=TRUE) E nas configurações do cliente SAP Logon

Habilitar SAP GUI Scripting (configuração única)

  1. Abra SAP Logon → Customize Local Layout (Alt+F12) → Options
  2. Vá para Accessibility & Scripting → Scripting
  3. ✅ Habilite o scripting
  4. ❌ Desabilite "Notificar quando um script anexar a uma sessão SAP GUI em execução"
  5. ❌ Desabilite "Notificar quando um script abrir uma conexão"
  6. Peça ao administrador BASIS para executar a transação RZ11 → defina sapgui/user_scripting = TRUE

Instalação

# 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 .

Início Rápido

Opção A — modo stdio (clientes locais)

O SAPient MCP funciona com qualquer cliente compatível com MCP. Escolha o seu abaixo.


Claude Desktop

Edite %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

Ou edite ~/.claude/mcp.json / .claude/mcp.json na raiz do seu projeto:

{
  "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

Vá para Cursor Settings → MCP → Add new MCP Server → digite command, depois insira:

python -m sapient_mcp --caps screenshot,codegen,advanced

Ou edite ~/.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)

Instale o servidor MCP via CLI do VS Code:

code --add-mcp '{"name":"sapient","command":"python","args":["-m","sapient_mcp","--caps","screenshot,codegen,advanced"]}'

Ou adicione a .vscode/mcp.json no seu workspace:

{
  "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

Edite ~/.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"
      }
    }
  }
}

Observação: No modo stdio, o SAPient MCP nunca escreve em stdout ou stderr — todos os logs vão apenas para o arquivo de log. Isso é necessário para uma comunicação JSON-RPC limpa em todos os clientes.

Opção B — modo SSE/HTTP (remoto / CI / multi-usuário)

Melhor quando a máquina SAP está separada de onde o cliente de IA é executado, ou quando vários desenvolvedores querem compartilhar uma única instância do SAPient.

Execute o servidor na sua máquina Windows com SAP:

python -m sapient_mcp --port 8765 --caps screenshot,codegen,advanced

Depois aponte qualquer cliente MCP para o endpoint HTTP:

{
  "mcpServers": {
    "sapient": {
      "url": "http://sap-windows-machine:8765/mcp"
    }
  }
}

Isso funciona de forma idêntica no Claude Desktop, Claude Code, Cursor, VS Code, Windsurf e qualquer outro cliente compatível com MCP.

Opção C — Arquivo de configuração

python -m sapient_mcp --config C:\sap_config.json

Variáveis de Ambiente

Todas as configurações podem ser fornecidas como variáveis de ambiente com o prefixo ROBOSAP_MCP_:

VariávelPadrãoDescrição
ROBOSAP_MCP_SAPLOGON_PATHC:\...\saplogon.exeCaminho para o executável do SAP Logon
ROBOSAP_MCP_SAP_SERVERnullDescrição do servidor para conexão automática
ROBOSAP_MCP_SAP_CLIENTnullCliente SAP para login automático
ROBOSAP_MCP_SAP_USERnullUsuário SAP para login automático
ROBOSAP_MCP_SAP_PASSWORDnullSenha SAP (nunca registrada em log)
ROBOSAP_MCP_PORTnull (stdio)Porta para modo SSE
ROBOSAP_MCP_CAPS""Capacidades separadas por vírgula: screenshot,codegen,advanced
ROBOSAP_MCP_OUTPUT_DIR./sap_outputDiretório de capturas de tela e logs
ROBOSAP_MCP_SCREENSHOT_ON_ERRORtrueCaptura automática de tela em falhas de ferramentas

Ferramentas Disponíveis

Núcleo (sempre carregado)

FerramentaDescrição
sap_openIniciar SAP Logon
sap_connect_to_serverConectar ao servidor SAP
sap_connect_to_runningAnexar à sessão SAP em execução
sap_get_session_infoSomente leitura: estado atual e título
sap_closeFechar SAP
sap_execute_transactionExecutar um código de transação
sap_activate_tabClicar em uma aba pelo rótulo
sap_get_window_titleSomente leitura: título da janela atual
sap_select_menu_itemNavegar na barra de menus
sap_send_keyEnviar tecla do teclado (Enter, F3, etc.)
sap_fill_text_fieldPreencher um campo pelo seu rótulo
sap_clear_text_fieldLimpar um campo
sap_set_checkboxMarcar uma caixa de seleção
sap_unset_checkboxDesmarcar uma caixa de seleção
sap_select_radio_buttonSelecionar um botão de opção
sap_push_buttonClicar em um botão pelo rótulo
sap_button_existsSomente leitura: verificar se o botão existe
sap_read_text_fieldSomente leitura: ler valor do campo
sap_read_textSomente leitura: ler qualquer elemento de texto
sap_read_status_barSomente leitura: mensagem da barra de status do SAP
sap_count_table_rowsSomente leitura: contagem de linhas da tabela
sap_select_table_rowSelecionar uma linha da tabela
sap_read_table_cellSomente leitura: ler valor de uma célula
sap_fill_cellPreencher uma célula da tabela
sap_double_click_cellDuplo clique em uma célula da tabela
sap_scroll_tableRolar tabela para cima/baixo

--caps screenshot

FerramentaDescrição
sap_take_screenshotCapturar captura de tela da janela SAP

--caps codegen

FerramentaDescrição
sap_get_generated_scriptObter script Robot Framework acumulado
sap_clear_scriptLimpar buffer de script

--caps advanced

FerramentaDescrição
sap_get_snapshotInstantâneo JSON estruturado da janela atual

Exemplo de Conversa com LLM

Você: Crie um pedido de compra para o fornecedor 100001, código da empresa 1000, com 50 unidades do material ABC-001

O SAPient guiará o LLM para:

  1. Chamar sap_execute_transaction("/nME21N")
  2. Chamar sap_get_window_title() → "Criar Pedido de Compra"
  3. Chamar sap_fill_text_field("Vendor", "100001")
  4. Chamar sap_fill_text_field("Company Code", "1000")
  5. Chamar sap_send_key("Enter") para aceitar o cabeçalho
  6. Chamar sap_activate_tab("Item Overview")
  7. Chamar sap_fill_cell("1", "Material", "ABC-001")
  8. Chamar sap_fill_cell("1", "Quantity", "50")
  9. Chamar sap_push_button("Save")
  10. Chamar sap_read_status_bar() → "Pedido de compra 4500001234 criado"

Estrutura do Projeto

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

Logs

Os logs são gravados em {output_dir}/sapient_mcp.log.

No modo stdio, os logs nunca vão para stdout/stderr (quebraria o JSON-RPC). No modo SSE, os logs também aparecem no stderr.