MCP ExecAuto

Engine universal MSExecAuto via REST. Suporta MATA010/020/030/110/120/410 e FINA050 (Modelo 1 e 3) com conversao automatica de tipos via SX3 e rollback transparente.

Assinatura: POST /McpExecAuto/exec {"routine":"MATA410","operation":3,"header":{...},"items":[{...}]}

Retorna: JsonObject {success, routine, operation, key, message, timestamp}

O McpExecAuto.prw e um WSRESTFUL que executa qualquer MSExecAuto registrado via JSON padronizado. Substitui dezenas de User Functions custom de integracao por um endpoint generico.

Rotinas suportadas

RoutineTabelaModeloO que e
MATA020SA21Cadastro de Fornecedor
MATA030SA11Cadastro de Cliente
MATA010SB11Cadastro de Produto (warmup SAH)
FINA050SE21Titulo a Pagar
MATA110SC13Solicitacao de Compra
MATA120SC73Pedido de Compra
MATA410SC53Pedido de Venda

Autenticacao

Obrigatorio. Configure MV_MCPADMK no appserver.ini com chave forte:

openssl rand -hex 32   # gera chave segura

Envie no header da requisicao:

curl -H "X-Admin-Key: SUA_CHAVE_AQUI" ...

Listar rotinas (auto-documentacao pra LLMs)

curl 'https://seu-protheus:8443/McpExecAuto/exec' \
  -X POST -H "X-Admin-Key: ..." -H "Content-Type: application/json" \
  -d '{"routine":"_LIST"}'

Retorna estrutura inspirada em function calling da OpenAI — sua IA usa pra descobrir o que pode executar.

Modelo 1 (cadastro simples)

{
  "routine": "MATA030",
  "operation": 3,
  "fields": {
    "A1_COD": "C99999",
    "A1_LOJA": "01",
    "A1_NOME": "ACME LTDA",
    "A1_PESSOA": "J",
    "A1_CGC": "12345678000199",
    "A1_EST": "SP"
  }
}

Modelo 3 (cabecalho + itens)

{
  "routine": "MATA410",
  "operation": 3,
  "header": {
    "C5_CLIENTE": "C99999",
    "C5_LOJACLI": "01",
    "C5_TIPO": "N",
    "C5_CONDPAG": "001"
  },
  "items": [
    {"C6_PRODUTO":"P00001","C6_QTDVEN":10,"C6_PRCVEN":250.00,"C6_TES":"501"},
    {"C6_PRODUTO":"P00002","C6_QTDVEN":5, "C6_PRCVEN":480.00,"C6_TES":"501"}
  ]
}

Operations

Conversao automatica de tipos (via SX3)

JSON manda valores como string/number/boolean. A engine consulta SX3->X3_TIPO e converte automaticamente:

Tratamento de erro

Em caso de falha:

  1. lMsErroAuto = .T. detectado
  2. RollbackSX8() automatico (numerador nao fica preso)
  3. Le NomeAutoLog() com retry (race condition do arquivo)
  4. Retorna JSON: {"success":false, "error":"...detalhes do log..."}

Em sucesso:

  1. ConfirmSX8()
  2. Obtem chave gerada via DbGoBottom
  3. Retorna: {"success":true, "key":"000123", "timestamp":"..."}

Pegadinhas

Quando NAO usar

Fonte completo

Codigo AdvPL aberto (MIT, ~14KB): baixar McpExecAuto.prw.

Tutorial completo com casos reais e tabela comparativa: post no blog.

Exemplos

Inclusao de cliente (Modelo 1)

curl -X POST 'https://seu-protheus:8443/McpExecAuto/exec' -H "X-Admin-Key: ..." -d '{"routine":"MATA030","operation":3,"fields":{"A1_COD":"C99999","A1_LOJA":"01","A1_NOME":"ACME LTDA"}}'

Output: {"success":true,"routine":"MATA030","key":"C99999","timestamp":"20260514 14:32:08"}

Veja também