Instalação em três passos.
Você precisa de Node.js 22.12 ou mais recente, de acesso ao sistema SAP (no S/4HANA Cloud, a função de negócio de desenvolvedor que seu usuário já tem para o Eclipse ADT; on-premise, o serviço /sap/bc/adt ativo na SICF) e de um navegador Chromium para o SSO por navegador. A versão completa, com caminhos do Windows e os logs do host, está no README.
Descreva seus sistemas SAP
Um arquivo, ~/.abap-adt-mcp/systems.json, uma entrada por sistema. A chave é o nome que você usará nos chats. Esta entrada completa de S/4HANA Cloud com SSO por navegador começa somente leitura; remova a linha policy quando estiver pronto para escrever, e o modelo passa a criar, editar e ativar dentro das suas autorizações SAP.
{
"DEV": {
"url": "https://myXXXXXX.s4hana.cloud.sap",
"client": "080",
"authType": "sso",
"default": true,
"policy": { "readOnly": true }
}
}Registre o servidor no seu host
No Claude Code é uma linha. O Claude Desktop recebe o JSON em Settings, Developer, Edit Config, depois um reinício. O mesmo mapa funciona no Cursor e no Cline; o VS Code chama-o de servers.
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"
}
}
}
}Diga olá
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 nada aparecer no host, leia o log MCP dele: 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.
| Pedido | Ferramentas 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.
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 policy | Efeito |
|---|---|
| readOnly | Só ferramentas de leitura executam. Toda escrita de código, runSnippet, unitTestRun e execuções do ATC são recusadas. |
| allowedPackages | Escritas só dentro destes padrões de pacote (["Z*", "$*"]); leituras nunca são barradas. |
| deniedTables | Padrões recusados em tableContents, em todo FROM/JOIN de runQuery, e procurados no ABAP escrito. |
| allowDataPreview | Desligado salvo indicação. Abre linhas de tabela por nome. |
| allowFreeSql | Desligado salvo indicação. Abre runQuery; implica a pré-visualização de dados. |
| deniedTools | Nomes, padrões ou toolset:git recusados neste destino; as ferramentas continuam listadas. |
| allowedTransports | Todo 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.
dumps, dumpDetails, a linha, a correção, ativada e testada.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.
Plugin do Claude Code
O repositório é o seu próprio marketplace de plugins. Dois comandos registram o servidor e carregam as duas skills, fixadas na release com que vêm.
/plugin marketplace add williansaez/abap-adt-mcp
/plugin install abap-adt-mcp@abap-adt-mcpContê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:latestVersã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.7.0
npm audit signaturesA 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 buildModos 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.
Node.js, um systems.json, uma linha no seu host. O primeiro chat já lê uma classe; as salvaguardas decidem o que ele pode escrever.