Deixe o Claude ler, escrever, testar e verificar ABAP nos seus sistemas SAP.

abap-adt-mcp é um servidor Model Context Protocol. Execute-o ao lado do Claude Desktop, do Claude Code ou de qualquer outro host MCP, aponte-o para um ou mais sistemas SAP, e o modelo passa a ter os mesmos endpoints REST do ADT que o Eclipse usa: pesquisar objetos, ler e editar código-fonte, criar ordens de transporte, ativar, executar ABAP Unit e ATC, ler dumps, consultar tabelas.

173 ferramentas, 16 conjuntosS/4HANA Cloud e on-premiseNode.js 22.12+MIT

Instalação em três passos.

Três passos, todos dentro de um chat. Você precisa de Node.js 22.12 ou mais recente e de um navegador Chromium (Chrome ou Edge) para o login no SAP. A versão completa, com caminhos do Windows e os logs do host, está no README.

Instale o plugin

Um único plugin traz o servidor e um guia de configuração que o agente segue, na aba Code ou no Cowork do aplicativo Claude (o terminal também serve). O caminho mais fácil é colar a frase ao lado num chat; o agente executa os comandos e pede sua aprovação antes de cada um.

Instale o plugin do abap-adt-mcp a partir do marketplace williansaez/abap-adt-mcp, usando plugin marketplace add e depois plugin install, e me avise quando eu precisar recarregar.

Ou faça você mesmo:

  • Aba Code (ou terminal): digite os três comandos abaixo na caixa do chat, um de cada vez.
  • Cowork: Customize, Plugins, Add, Add marketplace, digite williansaez/abap-adt-mcp e clique em Add no plugin.
/plugin marketplace add williansaez/abap-adt-mcp
/plugin install abap-adt-mcp@abap-adt-mcp
/reload-plugins

Diga qual é o sistema SAP

No mesmo chat, informe o endereço e o mandante. O guia de configuração grava ~/.abap-adt-mcp/systems.json, começando somente leitura, e pede que você execute /reload-plugins. Enquanto esse arquivo não existir, o servidor só responde listSystems e healthcheck, os dois dizendo o que falta. No S/4HANA Cloud seu usuário precisa da função de negócio de desenvolvedor que já tem para o Eclipse ADT; on-premise, /sap/bc/adt precisa estar ativo na SICF.

Configure o abap-adt-mcp para o meu sistema SAP DEV em https://myXXXXXX.s4hana.cloud.sap, mandante 080, com login pelo navegador, começando somente leitura.

Ou escreva o arquivo você mesmo. Remova a linha policy quando quiser que o modelo crie, edite e ative dentro das suas autorizações SAP:

{
  "DEV": {
    "url": "https://myXXXXXX.s4hana.cloud.sap",
    "client": "080",
    "authType": "sso",
    "default": true,
    "policy": { "readOnly": true }
  }
}

Diga olá

Depois de recarregar, abra um chat novo. O modelo chama listSystems, login (uma janela do navegador aparece uma vez para SSO), searchObject e getObjectSource. Quando o código-fonte voltar, está pronto.

Liste meus sistemas SAP, faça login no DEV e mostre o código-fonte da classe CL_ABAP_CHAR_UTILITIES.

Se as ferramentas SAP não aparecerem, rode npx -y abap-adt-mcp --check num terminal: uma linha por verificação, Node, o arquivo de sistemas, cada sistema por HTTPS e o navegador. Depois leia o log MCP do host: spawn npx ENOENT significa Node.js ausente; nenhuma janela do navegador significa que nenhum Chromium foi encontrado (SAP_BROWSER_PATH indica um); on-premise, /sap/bc/adt precisa estar ativo na SICF. A lista de solução de problemas tem o resto.

O que pedir ao modelo.

O servidor é uma caixa de ferramentas de onde o modelo escolhe: peça em linguagem natural e ele decide a sequência. As ferramentas de escrita bloqueiam e desbloqueiam sozinhas, activate=true ativa na mesma chamada, e todo erro é JSON com kind, hint e as próximas ferramentas a tentar.

PedidoFerramentas que o modelo usa
"Explique o que o método GET_DATA de ZCL_ORDER_SERVICE faz."searchObject, getMethodSource
"Onde a tabela ZTABLE ainda é usada, e por quais programas?"whereUsed, sourceTextSearch, grepPackage
"Adicione uma verificação de nulo no início de GET_DATA, ative e execute os testes unitários."resolveTransport, syntaxCheckCode, editObjectSource, unitTestRun, objectDiff
"Crie a classe ZCL_HELLO no pacote ZDEMO que imprime Hello World, com um teste unitário."validateNewObject, resolveTransport, createObject, setObjectSource, createTestInclude, unitTestRun
"Execute o ATC no pacote ZFIN e aplique todo quickfix que for seguro."createAtcRun, atcWorklists, atcQuickfixProposals, atcApplyQuickfix, atcSummary
"O que mudou na ordem de transporte DEVK900123? É seguro liberar?"transportDetails, transportUnifiedDiff
"Por que aconteceu o último dump do usuário DEVELOPER? Proponha uma correção."dumps, dumpDetails, getObjectSource
"ZCL_ORDER_SERVICE está pronta para ABAP Cloud? Quais objetos SAP a bloqueiam?"apiReleaseState, createAtcRun
"Selecione as dez linhas mais recentes de ZTABLE onde STATUS = 'X'."runQuery (quando o destino permitir dados)

Seis fluxos prontos também viajam como prompts MCP: create-object, safe-edit, review-transport, fix-atc, clean-core-check, debug-dump. Cada um nomeia as ferramentas em ordem e diz onde para e pergunta.

As salvaguardas vivem no servidor, não no host.

O bloco policy de um destino é avaliado no servidor antes da chamada SAP da ferramenta, independentemente do que o host aprova. As recusas voltam como kind: "policyDenied" nomeando a barreira. Um destino sem policy é totalmente gravável dentro das suas autorizações SAP e não lê dados de tabelas até você permitir.

{ "kind": "policyDenied", "gate": "readOnly", "destination": "PRD", "hint": "PRD é readOnly; a escrita foi recusada antes de qualquer chamada SAP" }

Além disso: segredos ficam em ${env:VAR}, o TLS permanece ligado por destino, toda chamada vai para um log de auditoria com ferramenta, destino, resultado e barreira, e as mensagens de erro passam por redação. Conteúdo vindo do SAP é entrada não confiável; use um host que pergunte antes de chamadas destrutivas.

Chave da policyEfeito
readOnlySó ferramentas de leitura executam. Toda escrita de código, runSnippet, unitTestRun e execuções do ATC são recusadas.
allowedPackagesEscritas só dentro destes padrões de pacote (["Z*", "$*"]); leituras nunca são barradas.
deniedTablesPadrões recusados em tableContents, em todo FROM/JOIN de runQuery, e procurados no ABAP escrito.
allowDataPreviewDesligado salvo indicação. Abre linhas de tabela por nome.
allowFreeSqlDesligado salvo indicação. Abre runQuery; implica a pré-visualização de dados.
deniedToolsNomes, padrões ou toolset:git recusados neste destino; as ferramentas continuam listadas.
allowedTransportsTodo argumento de transporte precisa corresponder; criar ordens é recusado.

Veja funcionar nos problemas que você tem de verdade.

Um dump às três da manhã, vinte e sete achados do ATC numa sexta-feira, uma ordem de transporte que ninguém quer liberar, uma classe que ainda precisa do seu teste, código que tem de sobreviver ao S/4HANA Cloud. Escolha o que mais parece a sua semana.

Seu sistema SAP agora aceita prompts.Hosts, servidor e sistemas em um diagrama, quatro capacidades, a recusa em PRD, a linha de instalação.
Um dump às 03:12.dumps, dumpDetails, a linha, a correção, ativada e testada.
27 achados do ATC em ZFIN.19 quickfixes determinísticos aplicados, isenções pedidas com um aprovador humano.
DEVK900123 pode ser liberada?Diff unificado, um mandante fixo no código, corrigido, testado, liberada só com a sua palavra.
Classe nova. Teste novo. Uma frase.Validar, transporte, criar, ativar, testar; a mesma frase em PRD é recusada.
Vai rodar no S/4HANA Cloud?apiReleaseState classifica cada objeto SAP, nomeia o sucessor, depois a reescrita.

173 ferramentas, 16 conjuntos.

Esquemas de ferramentas custam contexto. MCP_TOOLSETS=focused publica as 114 ferramentas de desenvolvimento do dia a dia; all acrescenta debugger, traces, abapGit, RAP, serviços, refatoração e discovery. A referência por ferramenta, com parâmetros e anotações de leitura/destrutiva, está em docs/TOOLS.md.

  • core6 · destinos, saúde, sessão
  • source16 · ler, escrever, bloquear, diff
  • objects27 · pesquisar, navegar, criar, ativar
  • transports18 · ordens de transporte
  • analysis16 · sintaxe, completação, apiReleaseState, runSnippet
  • tests4 · ABAP Unit
  • atc14 · execuções, quickfixes, isenções
  • data10 · DDIC, tableContents, runQuery
  • runtime3 · feeds, dumps
  • discovery7 · descoberta ADT, detalhes de features
  • refactoring8 · renomear, extrair método, mudar pacote
  • rap8 · geração RAP
  • services4 · serviços de negócio
  • git10 · abapGit
  • debugger13 · breakpoints, pilha, variáveis
  • traces9 · traces de SQL e de runtime

● no preset focused (114 ferramentas). As outras 59 vêm com MCP_TOOLSETS=all.

Este servidor

  • Muitos destinos a partir de um processo, stdio ou HTTP
  • Policies aplicadas no servidor, log de auditoria, redação
  • Lê e pesquisa código, escreve código, bloqueios, dumps, dados, onde-usado, debugger, abapGit
  • Composições como resolveTransport, editObjectSource, grepPackage, apiReleaseState, runSnippet, objectDiff

ADT MCP Server oficial da SAP

  • Vem com o ADT para VS Code e Eclipse sob a chave abap-adt
  • Cria, ativa, testa, verifica e transporta
  • Não lê nem pesquisa código, não escreve código, não bloqueia, não mostra dumps
  • Os dois podem ser registrados lado a lado: chaves e nomes de ferramentas não colidem. docs/ROUTING.md mapeia os nomes.

Os serviços REST do ADT são os que o Eclipse usa e não estão publicados no SAP Business Accelerator Hub; a SAP API Policy os chama de internos. Se a SAP aceita o seu uso é uma pergunta para o seu contato na SAP. docs/API-POLICY.md tem a política seção por seção e uma configuração conservadora.

Outras formas de instalar.

Sem o plugin

Para o chat do Claude Desktop, Cursor, Cline, VS Code com Copilot ou Claude Code sem plugins. No Claude Code é a linha única; nos outros, o JSON (no Claude Desktop em Settings, Developer, Edit Config, depois um reinício; o VS Code chama o mapa de servers). Escreva o systems.json como no passo 2.

claude mcp add abap-adt-mcp \
  -e SAP_SYSTEMS_FILE=$HOME/.abap-adt-mcp/systems.json \
  -- npx -y abap-adt-mcp
{
  "mcpServers": {
    "abap-adt-mcp": {
      "command": "npx",
      "args": ["-y", "abap-adt-mcp"],
      "env": {
        "SAP_SYSTEMS_FILE": "/Users/me/.abap-adt-mcp/systems.json",
        "MCP_TOOLSETS": "focused"
      }
    }
  }
}

Contêiner

Construído a partir de node:22-alpine, roda como o usuário sem privilégios node, publicado no GHCR a cada release. O SSO por navegador precisa de um navegador local; destinos basic e oauth funcionam dentro do contêiner.

docker run -i --rm \
  -v "$PWD/systems.json:/config/systems.json:ro" \
  -e SAP_SYSTEMS_FILE=/config/systems.json \
  ghcr.io/williansaez/abap-adt-mcp:latest

Versão fixada

npx -y abap-adt-mcp busca a release mais nova a cada início. Para um rollout controlado, fixe-a e verifique a atestação de proveniência que a publicação confiável anexa.

npx -y abap-adt-mcp@2.8.2
npm audit signatures

A partir do código

Um systems.json ao lado do checkout é lido automaticamente. Aponte o host para dist/index.js.

git clone https://github.com/williansaez/abap-adt-mcp.git
cd abap-adt-mcp && npm ci && npm run build

Modos de autenticação: sso (usuários nomeados do S/4HANA Cloud, uma janela do navegador uma vez), sso2 (on-premise sem navegador por um provedor local de tíquete confiável), basic (usuários on-premise e Communication Users), oauth (clientes não assistidos). Detalhes em docs/AUTH.md.

A um prompt da sua primeira ativação.

Instale o plugin, diga qual é o sistema, diga olá. O primeiro chat já lê uma classe; as salvaguardas decidem o que ele pode escrever.