mcpField
A
abap-adt-mcp

abap-adt-mcp

ローカル
github.com/williansaez開発ツール152 日前に更新

abap-adt-mcp について

abap-adt-mcpは、ABAP開発者向けにMCPホストをSAP ADTサービスへ接続します。コード編集、テスト、トランスポート、診断を扱い、接続先ごとの書き込み制限をサーバー側で適用します。

主な機能

  1. 01ABAPソースの読み取りと編集
  2. 02オブジェクト作成と単体テスト
  3. 03ATCチェックとクイックフィックス
  4. 04トランスポート・ダンプ・使用状況の調査
  5. 05接続先とパッケージのポリシー適用

活用シーン

  1. 01クラスを編集してテストを実行
  2. 02ATCでパッケージをチェック
  3. 03ショートダンプからソースを追跡
  4. 04リリース前にトランスポートを確認

MCP 対応

Claude Desktop、Claude Code、VS CodeなどのMCPホストに、SAP ADT操作をMCPツールとして提供します。接続先のポリシーはSAPへの呼び出し前にサーバーが適用します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"williansaez-abap-adt": {
"command": "npx",
"args": [
"-y",
"abap-adt-mcp"
],
"env": {
"SAP_SYSTEMS_FILE": "<SAP_SYSTEMS_FILE>",
"SAP_SYSTEMS": "<SAP_SYSTEMS>",
"SAP_DEFAULT_DESTINATION": "<SAP_DEFAULT_DESTINATION>",
"SAP_AUTH_TYPE": "<SAP_AUTH_TYPE>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"MCP_HTTP_HOST": "<MCP_HTTP_HOST>",
"MCP_HTTP_TOKEN": "<MCP_HTTP_TOKEN>",
"MCP_HTTP_MAX_SESSIONS": "<MCP_HTTP_MAX_SESSIONS>",
"MCP_HTTP_MAX_BODY_BYTES": "<MCP_HTTP_MAX_BODY_BYTES>",
"MCP_HTTP_SESSION_TTL_MINUTES": "<MCP_HTTP_SESSION_TTL_MINUTES>",
"MCP_HTTP_ALLOWED_ORIGINS": "<MCP_HTTP_ALLOWED_ORIGINS>",
"MCP_HTTP_ALLOWED_HOSTS": "<MCP_HTTP_ALLOWED_HOSTS>",
"MCP_EXPORT_ROOT": "<MCP_EXPORT_ROOT>",
"MCP_AUDIT_FILE": "<MCP_AUDIT_FILE>",
"MCP_ADT_TRACE_FILE": "<MCP_ADT_TRACE_FILE>",
"MCP_READ_ONLY": "<MCP_READ_ONLY>",
"MCP_ALLOW_DATA_PREVIEW": "<MCP_ALLOW_DATA_PREVIEW>",
"MCP_ALLOW_FREE_SQL": "<MCP_ALLOW_FREE_SQL>",
"MCP_TOOLSETS": "<MCP_TOOLSETS>",
"MCP_DISABLED_TOOLSETS": "<MCP_DISABLED_TOOLSETS>",
"MCP_MAX_RESPONSE_CHARS": "<MCP_MAX_RESPONSE_CHARS>",
"SAP_ALLOW_REENTRANCE_TICKET": "<SAP_ALLOW_REENTRANCE_TICKET>",
"SAP_URL": "<SAP_URL>",
"SAP_USER": "<SAP_USER>",
"SAP_PASSWORD": "<SAP_PASSWORD>",
"SAP_CLIENT": "<SAP_CLIENT>",
"SAP_LANGUAGE": "<SAP_LANGUAGE>",
"SAP_BROWSER_PATH": "<SAP_BROWSER_PATH>",
"SAP_BROWSER_PROFILE_DIR": "<SAP_BROWSER_PROFILE_DIR>",
"SAP_SSO2_COMMAND": "<SAP_SSO2_COMMAND>",
"SAP_SSO2_ARGS": "<SAP_SSO2_ARGS>",
"SAP_SSO2_TIMEOUT_MS": "<SAP_SSO2_TIMEOUT_MS>",
"SAP_TLS_INSECURE": "<SAP_TLS_INSECURE>",
"SAP_OAUTH_TOKEN_URL": "<SAP_OAUTH_TOKEN_URL>",
"SAP_OAUTH_CLIENT_ID": "<SAP_OAUTH_CLIENT_ID>",
"SAP_OAUTH_CLIENT_SECRET": "<SAP_OAUTH_CLIENT_SECRET>",
"SAP_OAUTH_SCOPE": "<SAP_OAUTH_SCOPE>",
"MCP_PROFILE_GATE": "<MCP_PROFILE_GATE>",
"MCP_SOURCE_CACHE_TTL_SECONDS": "<MCP_SOURCE_CACHE_TTL_SECONDS>",
"MCP_CACHE_DIR": "<MCP_CACHE_DIR>",
"MCP_API_CLASSIFICATION_FILES": "<MCP_API_CLASSIFICATION_FILES>"
}
}
}
}
起動コマンドnpx -y abap-adt-mcp
設定が必要な環境変数
SAP_SYSTEMS_FILEPath to a JSON file mapping destination names to system configs (url, client, authType basic/sso/sso2/oauth, credentials). Recommended; keep the file mode 0600. See systems.example.json
SAP_SYSTEMSシークレットInline JSON map of destinations (same shape as SAP_SYSTEMS_FILE). Contains credentials — prefer SAP_SYSTEMS_FILE
SAP_DEFAULT_DESTINATIONDestination name used when a tool call omits `destination` (alternatively mark an entry with "default": true)
SAP_AUTH_TYPEシークレットDefault auth type for entries that don't specify one: sso (default), sso2, basic, or oauth
MCP_HTTP_PORTWhen set (1024-65535), serve Streamable HTTP on http://127.0.0.1:<port>/mcp with bearer-token auth instead of stdio
MCP_HTTP_HOSTBind address for the HTTP transport (default 127.0.0.1). Set 0.0.0.0 only inside containers that publish the port
MCP_HTTP_TOKENシークレットBearer token for the HTTP transport; auto-generated and written to ~/.abap-adt-mcp/http-token when unset
MCP_HTTP_MAX_SESSIONSMaximum concurrent MCP sessions on the HTTP transport (default 16); further initialize requests get 503
MCP_HTTP_MAX_BODY_BYTESLargest request body the HTTP transport accepts, in bytes (default 4194304); larger bodies are refused with HTTP 413
MCP_HTTP_SESSION_TTL_MINUTESIdle minutes after which an HTTP session (and its SAP sessions/locks) is closed (default 30)
MCP_HTTP_ALLOWED_ORIGINSComma-separated Origin values allowed on the HTTP transport (loopback origins always allowed when bound to loopback; * allows any)
MCP_HTTP_ALLOWED_HOSTSComma-separated Host header values allowed (DNS-rebinding protection; loopback hosts always allowed when bound to loopback)
MCP_EXPORT_ROOTWhen set, exportPackageSources may only write inside this directory
MCP_AUDIT_FILEPath of a JSONL audit trail: one record per tool call (tool, destination, duration, outcome ok/error/denied/unavailable, policy gate, redacted argument summary)
MCP_ADT_TRACE_FILEDiagnostics: path of a JSONL trace with one line per ADT request (method, URI, status, headers). Cookie, Set-Cookie, Authorization and CSRF values are reduced to name and length; no response body is kept, error lines carry the first 300 characters of the redacted error text. Off when unset.
MCP_READ_ONLYSet to 1 to make every destination read-only (server-side; only read-only annotated tools plus login/logout run). Per-destination policies live in systems.json
MCP_ALLOW_DATA_PREVIEWSet to 1 to let tableContents read table and CDS rows on every destination that does not state policy.allowDataPreview itself (reading table data is off by default)
MCP_ALLOW_FREE_SQLSet to 1 to allow runQuery and tableContents with sqlQuery on every destination that does not state policy.allowFreeSql itself (free SQL is off by default; implies table data)
MCP_TOOLSETSToolsets to publish: comma list (core,source,objects,transports,analysis,tests,atc,data,discovery,runtime,refactoring,rap,services,git,debugger,traces) or a preset: all (default) or focused
MCP_DISABLED_TOOLSETSToolsets to hide, comma list (core cannot be disabled)
MCP_MAX_RESPONSE_CHARSCharacter budget for a single tool response before results are paged/truncated (default 40000, minimum 5000). Raise it if your MCP host accepts larger tool outputs
SAP_ALLOW_REENTRANCE_TICKETSet to 1 to enable the reentranceTicket tool (disabled by default: it returns a live SAP logon credential into the conversation)
SAP_URLLegacy single-system mode: base URL of the SAP system, e.g. https://host:44300
SAP_USERLegacy single-system mode: SAP username
SAP_PASSWORDシークレットLegacy single-system mode: SAP password
SAP_CLIENTLegacy single-system mode: SAP client number, e.g. 100
SAP_LANGUAGELegacy single-system mode: logon language, e.g. EN
SAP_BROWSER_PATHSSO destinations: path to a Chromium/Chrome/Edge binary for the browser login (auto-detected when unset)
SAP_BROWSER_PROFILE_DIRSSO destinations: directory of the persistent browser profile that keeps the identity-provider session (default ~/.abap-adt-mcp/sso/<host>)
SAP_SSO2_COMMANDLegacy single-system sso2 mode: absolute path to the trusted local ticket provider
SAP_SSO2_ARGSLegacy single-system sso2 mode: JSON array of provider arguments (never put a ticket here)
SAP_SSO2_TIMEOUT_MSLegacy single-system sso2 mode: provider timeout in milliseconds (default 30000; range 1000-300000)
SAP_TLS_INSECURELegacy single-system mode: set to 1 to skip TLS certificate verification for that system only (sandboxes with self-signed certificates)
SAP_OAUTH_TOKEN_URLシークレットLegacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 token endpoint (client_credentials)
SAP_OAUTH_CLIENT_IDシークレットLegacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 client id
SAP_OAUTH_CLIENT_SECRETシークレットLegacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 client secret
SAP_OAUTH_SCOPEシークレットLegacy single-system mode with SAP_AUTH_TYPE=oauth: optional OAuth2 scope
MCP_PROFILE_GATEPlatform gate for toolsets the destination does not expose (debugger, traces, abapGit, ...): enforce (default, refuse before calling SAP), warn (log only) or off
MCP_SOURCE_CACHE_TTL_SECONDSLifetime of the per-session source cache used by grepPackage, cdsViewInfo and syntaxCheckCode (default 300; 0 keeps entries until logout)
MCP_CACHE_DIRDirectory for the cached SAP cloudification repository used by apiReleaseState (default ~/.abap-adt-mcp/cache)
MCP_API_CLASSIFICATION_FILESExtra classification files for apiReleaseState, comma list: a path inside SAP's cloudification repository (partner/objectClassifications_ACME.json) or an https URL

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmabap-adt-mcp2.8.1

ツール

2

掲載時のツール一覧 · 2 日前に更新

このツールにパラメーターはありません。

詳細

abap-adt-mcp

Claude で SAP システム上の ABAP コードの読み取り、書き込み、テスト、チェックができます。

English · Português (Brasil) · Deutsch · プロジェクトサイト

npm version CI License: MIT Node.js MCP Registry Project site

Claude に文章を入力すると、有効化されたクラス、成功したユニットテスト、トランスポート番号が返ってきます。abap-adt-mcp はその間をつなぐサーバーです。Model Context Protocol サーバーとして、Claude Desktop、Claude Code、VS Code、その他の MCP ホストに、設定したすべての SAP システムで Eclipse と同じ ADT サービスを提供します。S/4HANA Cloud とオンプレミスのどちらにも対応しています。173 個のツールを 1 つのプロセスで提供し、サーバー自体がガードレールを強制します。読み取り専用に設定した接続先では、ホストが何を許可しても、SAP に届く前にすべての書き込みが拒否されます。

動作を見る。 プロジェクトサイトでは、短い動画 7 本、3 ステップのセットアップ、モデルへの依頼例を紹介しています。

本番システムに接続する前に

  • モデルは SAP ユーザーとして動作し、Eclipse で拒否される操作はできません。モデルが読み取った内容(ソース、ダンプ、表示したテーブル行)はモデルに送信されます。
  • policy ブロックのない接続先では、ユーザーが編集できるすべてのパッケージに書き込み可能です。テーブルデータは、許可するまで閉じられています。
  • 推奨:開発システムとテストシステムのみを使用してください。本番接続先を設定する必要がある場合は、手順 4 の PRD ポリシーを設定してください。ホストが何を許可しても、サーバーは SAP への呼び出しの前にポリシーを強制するため、不用意なプロンプトによってポリシーで禁止された場所に書き込まれることはありません(管理者向け)。

動作を見る

チャットに入力した一文が searchObject、getObjectSource、editObjectSource、unitTestRun に変わり、結果カードにはテスト 3 件成功、トランスポート DEVK900123 と表示されます

これが基本的な仕組みです。一文を入力すると、モデルがツールを選び、サーバーがオブジェクトをロックして、書き込み、有効化、ロック解除を行います。ユニットテストはトランスポート番号とともに成功として返ってきます。同じ変更を本番システムに依頼すると、SAP への呼び出しが 1 回も行われる前に policyDenied が返されます。ガードレールはチャットウィンドウではなく、サーバーにあります。

7 本の短い動画では、これらの一連の処理と、それを構成する個々の作業を紹介しています。短いダンプの発生行の特定、クイックフィックスを含む ATC の実行、トランスポートのレビュー、テスト付きクラスの作成、ABAP Cloud の対応状況チェックなどです。動画はプロジェクトサイトでご覧いただけます。

目次

セットアップ

前提条件は3つです。

  • nodejs.orgからNode.js 22.12以降(22または24 LTS)をインストールします。管理対象のノートパソコンをお使いの場合、IT部門への依頼は「Node.js LTS(22以降)をインストールしてください」の一文で済みます。ほかにインストールするものはありません。
  • SAP システムへのアクセス権。Eclipse ADT と同じです。S/4HANA Cloud では開発者ビジネスロール(標準提供ではSAP_BR_DEVELOPER)、オンプレミスでは、Basis チームにSICFの/sap/bc/adtサービスと通常の ADT 権限を依頼してください。
  • Chromium ブラウザー(Chrome、Edge または Brave)。ブラウザーでログインする場合(authType: sso、デフォルト)に必要です。basic、oauth、sso2では不要です。
1. SAP システムを記述する

ホームディレクトリに.abap-adt-mcpフォルダーを作成し、その中にシステムごと(「宛先」ごと)に1つのエントリーを含むsystems.jsonファイルを作成します。

  • Windows:フォルダーはC:\Users\<your user name>\.abap-adt-mcpです。JSON をメモ帳に貼り付け、名前をsystems.jsonにして、[名前を付けて保存]の[ファイルの種類]を[すべてのファイル]に設定してください。そうしないと、メモ帳がsystems.json.txtとして保存するため、サーバーがファイルを見つけられません。
  • macOS:フォルダーは/Users/<you>/.abap-adt-mcpです(Finder で Shift-Cmd-G を押し、~を入力)。エディターは任意です。
{
  "DEV": {
    "url": "https://myXXXXXX.s4hana.cloud.sap",
    "client": "080",
    "authType": "sso",
    "default": true,
    "policy": { "allowedPackages": ["ZFIN"] }
  }
}
  • DEVはシステムに付ける名前で、チャットで使用する名前です。"default": trueを設定すると、省略できます。
  • url:ランチパッドまたは Eclipse を開くときのアドレスです。パスは含めません。
  • client:SSO セッションでログインするクライアントです(ランチパッドのユーザーメニューにある[About]に表示されます)。クライアントが間違っていると、Eclipse で開けるオブジェクトに対して、後で「権限がありません」と表示されます。
  • authTypeのデフォルトはssoです。Eclipse ADT と同様に、ログイン時にブラウザーウィンドウが一度開きます。その他のモードについては、認証を参照してください。
  • policy.allowedPackages:モデルが書き込み可能なパッケージです。正確な名前またはパターン(ZFIN、Z*)を指定します。省略すると、Eclipse で編集できるすべてのパッケージが書き込み可能になります。まずは1つから始めてください。

本番システムとオンプレミスシステムは、最初の呼び出しが成功した後、手順4で追加します。

2. ホストにサーバーを登録する

パッケージは npm のabap-adt-mcpとして公開されており、npxで取得できます。Claude Desktop ではターミナルは不要で、最初のブロックを使います。Claude Code ではコマンドを1つ実行します。VS Code、Cursor などについては、下記を参照してください。各エントリーでは、サーバーに2つの設定を渡します。SAP_SYSTEMS_FILE(systems.jsonの場所)とMCP_TOOLSETS=focusedです。これにより、すべての173個ではなく、日常的な開発で使う114個のツールが公開されます。ツールスキーマでチャットのコンテキストを使い切らないようにするためです。デバッガー、トレース、abapGit、RAP、またはリファクタリングが必要な場合は、この設定を削除してください。

Claude Desktop(ターミナルは不要です):

  1. [Settings]>[Developer]>[Edit Config]を開くと、claude_desktop_config.jsonがあるフォルダーが開きます。ファイルをメモ帳または任意のエディターで開いてください。[Settings]に[Developer]タブがない場合、Claude Desktop は IT 部門によって管理されています。以下のエントリーを追加するよう依頼してください。
  2. ファイルにすでに"mcpServers"が含まれている場合は、その中に"abap-adt-mcp"エントリーだけを追加します。ファイルが空の場合は、ブロック全体を貼り付けてください。
  3. <you>をユーザー名に置き換えます(macOS:/Users/<you>/.abap-adt-mcp/systems.json)。Windows のパスでスラッシュを使っているのは意図的です。JSON ではバックスラッシュごとに\\が必要ですが、スラッシュはそのまま使えます。
  4. アプリを終了して、再度開きます。
{
  "mcpServers": {
    "abap-adt-mcp": {
      "command": "npx",
      "args": ["-y", "abap-adt-mcp"],
      "env": { "SAP_SYSTEMS_FILE": "C:/Users/<you>/.abap-adt-mcp/systems.json", "MCP_TOOLSETS": "focused" }
    }
  }
}

Claude Code(ターミナルで1行実行します。-s userを指定すると、現在のフォルダーだけでなく、すべてのプロジェクトにサーバーが登録されます):

claude mcp add -s user abap-adt-mcp -e SAP_SYSTEMS_FILE=$HOME/.abap-adt-mcp/systems.json -e MCP_TOOLSETS=focused -- npx -y abap-adt-mcp

Windows PowerShell でも同じです。

claude mcp add -s user abap-adt-mcp -e SAP_SYSTEMS_FILE=$env:USERPROFILE\.abap-adt-mcp\systems.json -e MCP_TOOLSETS=focused -- npx -y abap-adt-mcp

GitHub Copilot を使用する VS Code:.vscode/mcp.jsonのトップレベルにあるserversキーの下に、mcpServersの代わりに同じエントリーを追加します。docs/HOSTS.mdには、シークレット用の${input:}を含む、動作確認済みのファイルが記載されています。

  • Cursor、Cline、Windsurf、Copilot CLI、Eclipse については、docs/HOSTS.mdを参照してください。
  • キーabap-adt-mcpはそのままにしてください。これはホストに表示される名前であり、すべてのツールに付くプレフィックスであり、このプロジェクトのエージェントスキルが検索する名前でもあります。
3. まずは試してみる

新しいチャットを開き、次のように入力します(DEV は選んだキーに置き換えます。このクラスは SAP の標準クラスなので、プロンプトは読み取り専用で、どのシステムでも安全です)。

SAP システムの一覧を表示し、DEV にログインして、クラス CL_ABAP_CHAR_UTILITIES のソースを表示してください。

SSO ログイン用のブラウザーウィンドウが開きます(「サインインしたままにする」にチェックを入れると、次回以降のログインは自動で行われます)。続いてモデルが listSystems、searchObject、getObjectSource を呼び出し、返信では接続先の名前が示され、最後にクラスのソースが表示されます。ホストで永久に承認していないツールを実行する前には、ホストが確認を求めます。このダイアログはホストの配慮によるもので、保証となるのは policy ブロックです。ホストにサーバーが表示されない場合は、トラブルシューティングで確認するログを説明しています。

最初に編集する前に、知っておくとよいことが2つあります。

  • ポリシーで禁止された書き込みは、何も起きないまま終わるのではなく、拒否として返されます:kind: "policyDenied"、Policy: setObjectSource blocked on destination PRD (readOnly)。
  • モデルが行う変更はすべて、トランスポートとオブジェクトのバージョン履歴に記録されます:objectDiff と revisions で確認でき、あなたが承認したトランスポートのリリースなしに DEV から外に出ることはありません。
4. 本番環境とオンプレミスシステムを追加する

本番環境とオンプレミスのエントリーを追加した同じファイルの例です(すべてのオプションについては systems.example.json を参照してください)。

{
  "DEV": {
    "url": "https://myXXXXXX.s4hana.cloud.sap",
    "client": "080",
    "authType": "sso",
    "default": true,
    "policy": { "allowedPackages": ["Z*"] }
  },
  "PRD": {
    "url": "https://myYYYYYY.s4hana.cloud.sap",
    "client": "100",
    "authType": "sso",
    "policy": { "readOnly": true, "allowDataPreview": false, "deniedTools": ["exportPackageSources"] }
  },
  "ONPREM": {
    "url": "https://sap.example.com:44300",
    "client": "100",
    "authType": "basic",
    "user": "DEVELOPER",
    "password": "${env:ONPREM_PASSWORD}",
    "policy": { "allowedPackages": ["Z*", "$*"] },
    "tls": { "ca": "/etc/ssl/corp-ca.pem" }
  }
}
  • 本番環境の接続先を設定する必要がある場合は、PRD に最低限のポリシーを指定します:readOnly はモデルの要求内容にかかわらず、すべての書き込みを拒否します。allowDataPreview: false は、環境設定によって他の接続先ではテーブルデータが開かれる場合でも、そのデータを閉じたままにします。deniedTools は、パッケージ全体をディスクにコピーする唯一の読み取りツールである exportPackageSources を無効にします。
  • ${env:VAR} は環境変数からシークレットを読み込むため、ファイルに保存されることはありません。サーバーの起動時にホストへ変数を追加してください。claude mcp add では -e ONPREM_PASSWORD=... を指定するか、Claude Code を起動するシェルでエクスポートします。シェルの環境変数を引き継がない Claude Desktop では、env ブロックに "ONPREM_PASSWORD": "..." の行を追加します。パスワードを直接記載したファイルは、自分だけが読み取れるようにしてください(macOS と Linux では chmod 600 ~/.abap-adt-mcp/systems.json を実行します。Windows では、プロファイルフォルダーはすでに自分専用です)。SSO 専用のファイルには、特別な設定は不要です。
  • tls.ca には、社内の CA 証明書を指定します。検証を緩和できるのは接続先ごとのみです(起動時に通知されます)。プロセス全体での緩和はできません。
  • SAP_BASIS が 7.51 未満(SAP ERP 6.0 EHP7 や EHP8 など)の古いオンプレミスシステムでは、HTTP 経由での読み取りは問題ありませんが、リクエスト間でロックを維持できないため、書き込みは失敗します。そのエントリーに "transport": "rfc" と rfc ブロックを指定し、SAP NetWeaver RFC SDK をインストールしてください。SAP では同梱が認められていないため、独自の S-user を使って SAP からダウンロードしてください。手順は docs/RFC.md に記載されています。

設定は以上です。次はモデルへの依頼内容を確認してください。

モデルへの依頼例

サーバーはモデルが選ぶツールボックスです。自然な言葉で依頼すると、モデルが実行する順序を選びます。

依頼内容モデルが選ぶツール
「ZCL_ORDER_SERVICE のメソッド GET_DATA の処理内容を説明してください。」searchObject、getMethodSource
「テーブル ZTABLE はまだどこで使われていて、どのプログラムが使用していますか?」whereUsed、sourceTextSearch、grepPackage
「CDS ビュー ZI_PRODUCT のフィールドと関連付けを表示してください。」cdsViewInfo、objectStructureElements
「GET_DATA の先頭に null チェックを追加し、アクティブ化して単体テストを実行してください。」resolveTransport、syntaxCheckCode、editObjectSource(activate=true を指定)、unitTestRun、objectDiff
「パッケージ ZDEMO に Hello World を出力するクラス ZCL_HELLO を、単体テスト付きで作成してください。」validateNewObject、resolveTransport、createObject、setObjectSource、createTestInclude、unitTestRun
「パッケージ ZFIN で ATC を実行し、安全なクイックフィックスをすべて適用してください。」createAtcRun、atcWorklists、atcQuickfixProposals、atcApplyQuickfix、atcSummary
「トランスポート DEVK900123 で何が変更されましたか?レビューして、リリースしても安全か教えてください。」transportDetails、transportUnifiedDiff
「ユーザー DEVELOPER の直近のショートダンプはなぜ発生しましたか?修正案を提示してください。」dumps、dumpDetails、getObjectSource
「ZCL_ORDER_SERVICE は ABAP Cloud に対応していますか?妨げとなっている SAP オブジェクトはどれですか?」apiReleaseState、createAtcRun
「STATUS = 'X' の ZTABLE の最新 10 行を選択してください。」runQuery。データプレビューでテーブルを読み取れない場合は tableContents
「このコードスニペットを実行して、出力を表示してください。」runSnippet
「DEV がサポートしているツールセットは何ですか?デバッガーはそこで利用できますか?」systemProfile

明示的に指定しなくても、サーバーが自動で行う処理:

  • 書き込みツールは自動でロック、書き込み、ロック解除を行います。activate=true を指定すると、同じ呼び出しの中でアクティブ化します。
  • すべてのエラーは kind、hint、nextTools を含む JSON として返されるため、モデルはむやみに再試行せずに復旧できます。セッションの有効期限が切れている場合は再認証し、呼び出しを一度だけ再試行します。
  • 大きな結果は 40,000 文字の上限内でページ分割され、hasMore が報告されます。時間のかかる呼び出しでは進捗通知が送信されます。
  • テーブルの読み取りは、接続先で許可されている場合に限り実行されます。名前を指定した tableContents には allowDataPreview が、runQuery には allowFreeSql が必要です。
  • 作成と編集の手順は MCP の instructions フィールドに含まれます。また、用意済みの 6 つのワークフローが MCP プロンプトとして提供されます(create-object、safe-edit、review-transport、fix-atc、clean-core-check、debug-dump。Claude Code では /mcp__abap-adt-mcp__safe-edit DEV ZCL_ORDER_SERVICE "return early when the input table is empty")。
  • 各ツールには readOnlyHint/destructiveHint のアノテーションが付いています。そのため、アノテーションに基づいて承認を求めるホストでは、書き込み時にのみ承認を求めます。

ツールごとの実行手順、引数の形式、レシピについては、docs/WORKFLOWS.md をご覧ください。

管理者向け

ランドスケープの管理者が確認する観点から、サーバーについて説明します。

  • アイデンティティ。 すべての呼び出しは、接続先のユーザーとして SAP に送られ、そのユーザーの権限で実行されます。サーバーが SAP のチェックを省略することはなく、そのユーザーが持たないアクセス権を得ることもありません。sso と sso2 では、そのユーザーはキーボードの前にいる本人です。basic と oauth では保存された認証情報が使われるため、説明責任が重要な場合は、ユーザー名を特定できるアカウントを優先してください。表示専用 SAP ユーザーの権限については、docs/CONFIGURATION.mdに記載されています。
  • プロセス。 ユーザーごとに 1 つのプロセスが MCP ホストによって起動され、stdio で通信します。任意のHTTP トランスポートを起動しない限り、ネットワーク上で待ち受けることはありません。
  • ネットワーク。 設定された SAP ホスト、ブラウザー SSO 中の ID プロバイダー、および apiReleaseState の実行時に SAP のクラウド化リポジトリとして使用される raw.githubusercontent.com と通信します(24 時間キャッシュされます。deniedTools: ["apiReleaseState"] を設定すればネットワーク通信を行いません)。テレメトリや更新チェックはありません。npx 自体は npm レジストリに接続します。
  • ネイティブコード。 ネイティブコードを読み込むのは、"transport": "rfc" を指定した接続先のみです。ユーザーがインストールする SAP NetWeaver RFC SDK を、オプションの依存関係であり、ビルド済みバイナリを含む koffi 経由で使用します。そのインストールスクリプトはバイナリが読み込めるか確認し、読み込めない場合に限り、CMake を使ったソースからのビルドを試みます。ビルドに失敗しても問題はなく、スキップされます。HTTP 接続先のみで使うインストールでは、npm install --omit=optional を使って koffi を省略できます(docs/RFC.md)。
  • モデルに渡される情報。 ユーザーが承認したすべてのツール呼び出しの結果(ソース、表示した場合のテーブル行、ダンプ、ATC の検出結果、秘匿情報を削除した後のエラーテキスト)は MCP ホストに送られ、そこからホスト独自のデータ規約に従ってモデルプロバイダーに送信されます(プロバイダーを決めるのはホストであり、このサーバーではありません)。サーバーはそれ以外の場所には何も送信しません。接続先ごとに readOnly、deniedTables、deniedTools で対象を制限できます。
  • ディスク。 ~/.abap-adt-mcp/ には、systems.json(ユーザーが管理)、ホストごとの SSO ブラウザープロファイル(sso/<host>、モード 0700)、クラウド化キャッシュ、パッケージのエクスポート(exports/、exportPackageSources が書き込みを行う場合のみ)、HTTP トークン、有効にした場合の監査ログ、RFC 接続先を設定した場合の SAP RFC SDK 独自のログ(rfc/、モード 0700)が保存されます。SAP セッション Cookie がディスクに書き込まれることはありません。
  • シークレット。 ${env:VAR} は systems.json 内のすべての文字列で使用できます。インラインパスワードが含まれている場合、他のユーザーから読み取り可能なファイルは拒否されます。エラーメッセージには秘匿情報の削除処理が適用されます(ベアラートークン、Cookie、パスワード、user:password@host 形式の URL)。成功したツールの結果には秘匿情報の削除処理は適用されないため、制限には readOnly、deniedTables、deniedTools を使用してください。reentranceTicket(モデルが他の場所に持ち出す可能性のあるログオンチケット)は、SAP_ALLOW_REENTRANCE_TICKET=1 が設定されない限り無効です。
  • ポリシーで検出できないもの。 モデルが実行する ABAP(runSnippet、runClass、unitTestRun)は、ユーザーの権限で実行されます。deniedTables はスニペットのテキストをスキャンしますが、動的 SQL やコードが呼び出すものは検査しません。コードの実行を許容できない場合は、該当するツールを deniedTools に登録するか、readOnly を使用してください。
  • 信頼できない入力。 SAP のコメント、テーブル行、フィードには、モデルを誘導しようとするテキストが含まれる場合があります。ツール呼び出しの前に確認を求めるホストを使用し、承認する前にツールカタログで太字になっている(破壊的な)ツールを確認してください。
  • 監査。 MCP_AUDIT_FILE=/var/log/abap-adt-mcp/audit.jsonl を設定すると、呼び出しごとに 1 行の JSON が追記されます。記録されるのは、ツール、接続先、結果、所要時間、拒否したポリシーゲート、秘匿情報を削除した引数です。ファイルはユーザー自身のプロセスによって各ワークステーションに書き込まれます。中央での収集と改ざん防止は、ユーザー側で手配してください。docs/CONFIGURATION.mdにレコード形式が記載されています。
  • SAP API ポリシー。 SAP は、このサーバーが使用する ADT サービスを、SAP が推奨するチャネルを通じた開発向けの内部インターフェースと位置付けており、このプロジェクトはその推奨対象に含まれていません。非公開インターフェースの使用は自己責任です。SAP の担当者に確認し、サーバーは開発システムとテストシステムに限定して使用してください。詳細はSAP API ポリシーを参照してください。
  • 無効化。 ノート PC の紛失やシークレットの漏えいがあった場合は、SSO プロファイル、ID プロバイダーのセッション、OAuth シークレット、SAP パスワード、ローカルファイルを個別に無効化します:SECURITY.md、廃止手順。
  • リリース。 修正が提供されるのは最新リリースのみです。管理された段階的なロールアウトを行うには、セットアップでバージョンを固定せずに使われる npx -y abap-adt-mcp ではなく、バージョンを固定してください(その他のインストール方法)。テスト済みのモードは sso、sso2、オンプレミスの basic です。oauth と Communication-User の basic はテストされていません(認証)。脆弱性については、SECURITY.md、脆弱性の報告を参照してください。
ポリシーキー

systems.json の宛先ごとに、SAP への呼び出し前にサーバーで適用されます。

キー効果
readOnly読み取り専用ツールのみ実行されます。すべてのソース書き込み、lock、runSnippet、runClass、unitTestRun、createAtcRun、atcSummary は拒否されます。テーブル読み取り(開いた場合)と exportPackageSources は引き続き許可されます。以下のキーを使って閉じてください。
allowDataPreviewtrue でない限り無効です。tableContents は、名前を指定してテーブルまたは CDS エンティティの行を読み取れます。明示的な false は MCP_ALLOW_DATA_PREVIEW より優先されます。
allowFreeSqltrue でない限り無効です。runQuery と、sqlQuery を指定した tableContents(allowDataPreview も必要です)。
deniedTablesモデルが読み取れないパターン(["PA*", "HR*", "USR02"])です。読み取りと、書き込みまたは実行する ABAP テキストに適用されます。SAP 自身の表示権限は引き続き最低限の基準となります。
deniedTools完全に拒否するツールです。名前、パターン(rapGen*)、または toolset:git を指定します。
allowedPackagesこれらのパッケージ内でのみ書き込みを許可します(["Z*", "$*"])。解決できないパッケージは拒否されます。
allowedTransportsこれらのトランスポートでのみ書き込みを許可します。新規作成は拒否されます。

拒否された場合は、ゲート名を示す kind: "policyDenied" が返されます。listSystems には、すべてのポリシーと有効な dataAccess が表示されます。脅威モデルと残存リスクについては SECURITY.md を、レシピを含むツールごとのゲートについては docs/CONFIGURATION.md を、SAP の API Policy に基づく状況については docs/API-POLICY.md をご覧ください。

認証

各宛先で個別の authType を選択します。詳細と SAP 側で必要な手順については、docs/AUTH.md をご覧ください。

モード用途設定する項目SAP 側の設定
sso(デフォルト)S/4HANA Cloud の指名ユーザー、および Basic チャレンジを返すオンプレミスシステム何もありません。ホストごとにブラウザーが一度開き、セッションはメモリに保持されます。SAP_BROWSER_PATH でブラウザーを指定できます。Eclipse ADT 用にユーザーに必要な開発者ビジネスロール
sso2信頼されたローカル SNC/RFC ブリッジが短時間有効なチケットを発行できる場合の、ヘッドレスなオンプレミス指名ユーザーsso2.command、args、timeoutMsBasis による SNC マッピング、チケット受け入れ、ADT ICF ログオンの設定
basicオンプレミスの AS ABAP ユーザー、S/4HANA Cloud Communication Useruser と password(${env:VAR} として指定)ADT 権限を持つユーザー
oauthS/4HANA Cloud の無人クライアントoauth.tokenUrl、clientId、clientSecretCommunication User、OAuth 2.0 を使用する Communication System、およびテナントの ADT シナリオ向け Communication Arrangement
  • S/4HANA Cloud の指名ビジネスユーザーは Basic 認証を使用できません。sso でログインするか、Communication User を作成してください。Communication User を使用した oauth と basic は技術ユーザー向けの SAP ドキュメントに沿っていますが、このプロジェクトではライブテナントに対して動作確認していません。利用する前に、ご自身の環境で確認してください。
  • オンプレミスで Basic チャレンジが発生すると、ブラウザーウィンドウで SAP パスワードの入力を求められます。ブラウザーにパスワードを保存すると、専用プロファイルの ~/.abap-adt-mcp/sso/<host> に保存されます。
  • プロセス全体で TLS 検証は有効です。宛先ごとに、tls.ca で企業 CA を追加し、tls.servername で IP アドレス経由で接続するシステムの証明書名を指定できます。tls.cert と key(または pfx と passphrase)でクライアント証明書を提示できます。また、insecureTls: true の設定は起動時に通知されます。省略可能な gitUser/gitPassword を使うと、abapGit の認証情報を会話に含めずに済みます。

S/4HANA Cloud とオンプレミスの比較

systemProfile(destination) は、宛先がクラウドかオンプレミスか、バックエンドにないツールセットを報告します。該当するツールは SAP を呼び出す前に拒否されます。docs/TESTPLAN.md に記録されているのは、Public Cloud テナントでの内容です。

項目S/4HANA Cloud(パブリックエディション)オンプレミス/プライベート
認証指名ユーザー:ブラウザー SSO のみ。無人実行:Communication Arrangement からの OAuth2、または Communication User による基本認証。基本認証、tls によるクライアント証明書、Basic チャレンジがあるシステムでのブラウザー SSO、ローカルチケットプロバイダー経由のヘッドレス sso2。
ローカルオブジェクトテストしたテナントでは $TMP が拒否されました(権限オブジェクト S_ABPLNGVS)。ABAP for Cloud Development を使用する顧客パッケージとその移送を使ってください。resolveTransport がそれを選択します。この環境では runSnippet に packageName、transport、responsible が必要です。$TMP が使用可能で、移送は不要です。runSnippet はデフォルトで $TMP を使用します。
ツールセットテストしたテナントでは RAP ジェネレーターがありません。デバッガー、トレース、abapGit はテナントと権限によって異なります。デバッガーがない場合、原因の特定には dumps/dumpDetails を使用します。テナントにテキストインデックスがない場合、sourceTextSearch は grepPackage にフォールバックします。最新リリースでは、ADT のツールセット一式を使用できます。
リリース済み APIapiReleaseState は、名前、オブジェクト URL、またはソース全体を確認します。ATC バリアントは ABAP_CLOUD_DEVELOPMENT_DEFAULT です。createObject には responsible が必要です。任意です。
業務データrunQuery/tableContents は表示権限を尊重し、宛先でそれらが許可されている必要があります。runSnippet には S_DEVELOP が必要なため、開発システムでのみ使用できます。同じです。

詳細は docs/CLOUD.md と、実際のセッションに基づく docs/FIELD-NOTES.md を参照してください。

その他のインストール方法

  • バージョンを固定する。 npx -y abap-adt-mcp は起動のたびに最新リリースを取得します。管理されたロールアウトでは、バージョンを固定してください(npx -y [email protected] または vX.Y.Z コンテナータグ)。リリースには npm provenance アテステーションが付属しており、npm audit signatures で検証できます。
  • Claude Code プラグイン。 2 つのコマンドでサーバーを登録し、2 つのエージェントスキルをインストールします(abap-adt-mcp は開発フローを説明し、abap-adt-mcp-setup はインストール手順を案内します)。/plugin marketplace add williansaez/abap-adt-mcp を実行し、続けて /plugin install abap-adt-mcp@abap-adt-mcp を実行してください。プラグインは同梱リリースのバージョンを固定し、すべてのツールセットを公開します。手順 1 の systems.json は引き続きご自身で作成してください。
  • コンテナー。 ghcr.io/williansaez/abap-adt-mcp:latest(vX.Y.Z も使用可能)は node:22-alpine からビルドされ、uid 1000 で実行されます。systems.json を読み取り専用でマウントし、参照されるシークレットを渡してください。ブラウザー SSO にはローカルブラウザーが必要なため、sso 宛先はワークステーション上の npm から実行してください。docs/HOSTS.md に docker run の行とファイル所有権に関する注意点があります。
  • MCP レジストリ。 レジストリを参照するホスト向けに、io.github.williansaez/abap-adt-mcp として登録されています。
  • ソースからインストールする。 git clone https://github.com/williansaez/abap-adt-mcp.git、npm ci、npm run build の順に実行し、ホストの参照先を node /absolute/path/abap-adt-mcp/dist/index.js に設定します。チェックアウトの隣にある systems.json は自動的に読み込まれます。

設定

  • 参照元は、優先順位の高い順に、SAP_SYSTEMS(インライン JSON)、SAP_SYSTEMS_FILE、インストール先と同じ場所にある systems.json、従来の単一システム用変数(SAP_URL、SAP_CLIENT、SAP_USER、SAP_PASSWORD、…)です。
  • 接続先ごとのキー:url、client、language、authType、default、user/password、sso2、oauth、insecureTls、gitUser/gitPassword、policy、tls、transport/rfc。任意の文字列に ${env:VAR} を指定できます。
  • グローバルな deniedTools、deniedTables、allowedPackages はありません。これらは接続先ごとに繰り返し指定します。

設定する可能性が高い変数は次のとおりです。

変数用途デフォルト
SAP_SYSTEMS_FILE接続先ファイルへのパスインラインの SAP_SYSTEMS より推奨
MCP_TOOLSETS公開するツールセットの all、focused、またはカンマ区切りのリストall(上記のセットアップでは focused を選択)
MCP_READ_ONLY1 にするとすべての接続先が読み取り専用になりますオフ
MCP_ALLOW_DATA_PREVIEW、MCP_ALLOW_FREE_SQLキーを明示していない接続先で、テーブルデータまたは SQL を利用可能にするには 1 を指定しますオフ
MCP_AUDIT_FILEJSONL 監査ログオフ
MCP_MAX_RESPONSE_CHARSページ分割を行うまでの、1 つのツール応答の文字数上限40000
MCP_HTTP_PORTstdio の代わりに、ベアラートークンを使用して 127.0.0.1:<port>/mcp で Streamable HTTP を提供します未設定(stdio)
SAP_BROWSER_PATHSSO:使用する Chromium バイナリ自動検出

各変数のデフォルト値と影響する項目、HTTP トランスポート(トークン、セッションと本文の上限、DNS リバインディング対策、共有インスタンスの意味)、監査レコードの形式については、docs/CONFIGURATION.md をご覧ください。

ツールカタログ

各ツールのリファレンス(説明、パラメーター、読み取り専用/破壊的操作の注記)は docs/TOOLS.md にあります。これは実際の tools/list 応答から生成され、CI のコントラクトテストで検証されています。listSystems と healthcheck を除くすべてのツールで、destination を任意で指定できます。

ツールスキーマはコンテキストを消費します。MCP_TOOLSETS には、プリセット(all(デフォルト)または focused(開発用ツール 114 個))か、以下のツールセット名をカンマ区切りで指定できます。MCP_DISABLED_TOOLSETS で一部を除外できます。core は常に公開されます。

太字の名前には destructiveHint: true が付いています(ツール 23 個)。これらは何かを上書き、削除、リリース、または実行するため、注釈によって承認を制御するホストでは、実行のたびに確認が求められます。

focused プリセット内(ツール 114 個)

ツールセットツール
core (6)
宛先、ヘルス、セッション
login, logout, dropSession, listSystems, healthcheck, systemProfile
source (16)
ソースコード
lock, unLock, listLocks, forceUnlock, getObjectSource, setObjectSource, editObjectSource, getMethodSource, setMethodSource, prettyPrinterSetting, setPrettyPrinterSetting, prettyPrinter, revisions, objectDiff, getTextElements, setTextElements
objects (27)
オブジェクトとナビゲーション
objectStructure, searchObject, findObjectPath, objectTypes, reentranceTicket, classIncludes, classComponents, deleteObject, activateObjects, activateByName, activatePackage, inactiveObjects, objectRegistrationInfo, creatableTypeDetails, validateNewObject, createObject, nodeContents, mainPrograms, typeHierarchy, objectStructureElements, objectEnhancements, packageTree, exportPackageSources, whereUsed, cdsViewInfo, sourceTextSearch, grepPackage
transports (18)
移送
transportDetails, transportUnifiedDiff, transportInfo, resolveTransport, createTransport, hasTransportConfig, transportConfigurations, getTransportConfiguration, setTransportsConfig, createTransportsConfig, userTransports, transportsByConfig, transportDelete, transportRelease, transportSetOwner, transportAddUser, systemUsers, transportReference
analysis (16)
構文とコード分析
syntaxCheckCode, syntaxCheckCdsUrl, codeCompletion, findDefinition, usageReferences, syntaxCheckTypes, codeCompletionFull, runClass, codeCompletionElement, usageReferenceSnippets, fixProposals, fixEdits, fragmentMappings, abapDocumentation, apiReleaseState, runSnippet
tests (4)
単体テスト
unitTestRun, unitTestEvaluation, unitTestOccurrenceMarkers, createTestInclude
atc (14)
ATC
atcCustomizing, atcQuickfixProposals, atcApplyQuickfix, atcCheckVariant, atcSummary, createAtcRun, atcWorklists, atcUsers, atcExemptProposal, atcRequestExemption, isProposalMessage, atcContactUri, atcChangeContact, atcDocumentation
data (10)
データアクセスとDDIC
annotationDefinitions, ddicElement, ddicRepositoryAccess, packageSearchHelp, getDomainProperties, setDomainProperties, getDataElementProperties, setDataElementProperties, tableContents, runQuery
runtime (3)
ランタイムエラー
feeds, dumps, dumpDetails

MCP_TOOLSETS=all またはツールセット名を指定した場合のみ(59 ツール)

ツールセットツール
discovery (7)
検出とメタデータ
featureDetails、collectionFeatureDetails、findCollectionByUrl、loadTypes、adtDiscovery、adtCoreDiscovery、adtCompatibilityGraph
refactoring (8)
リファクタリング
renameEvaluate、renamePreview、renameExecute、extractMethodEvaluate、extractMethodPreview、extractMethodExecute、changePackagePreview、changePackageExecute
rap (8)
RAP 生成
rapGenIsAvailable、rapGenGetSchema、rapGenGetContent、rapGenValidateInitial、rapGenValidateContent、rapGenPreview、rapGenGenerate、rapGenPublishService
services (4)
ビジネスサービス
publishServiceBinding、unPublishServiceBinding、fetchServiceDetails、bindingDetails
git (10)
abapGit
gitRepos、gitExternalRepoInfo、gitCreateRepo、gitPullRepo、gitUnlinkRepo、stageRepo、pushRepo、checkRepo、remoteRepoInfo、switchRepoBranch
debugger (13)
デバッガー
debuggerListeners、debuggerListen、debuggerDeleteListener、debuggerSetBreakpoints、debuggerDeleteBreakpoints、debuggerAttach、debuggerSaveSettings、debuggerStackTrace、debuggerVariables、debuggerChildVariables、debuggerStep、debuggerGoToStack、debuggerSetVariableValue
traces (9)
トレース
tracesList、tracesListRequests、tracesHitList、tracesDbAccess、tracesStatements、tracesSetParameters、tracesCreateConfiguration、tracesDeleteConfiguration、tracesDelete

ツールが利用できない理由は2つあります。ツールセットが公開されていない場合(拒否メッセージにツールセット名が示されます)、または接続先がそのツールを提供できない場合(不足しているものはsystemProfileに表示されます)です。

SAP の公式 ADT MCP Server との比較

SAP の ADT MCP Server は ADT for VS Code と Eclipse に付属し、サーバーキー abap-adt と独自のツール名で公開されています。このプロジェクトは abap-adt-mcp として公開され、1 つのプロセスから多数の接続先を利用でき、サーバー側でポリシーを適用します。また、resolveTransport、editObjectSource、grepPackage、apiReleaseState、runSnippet、objectDiff などの複合機能を追加しています。両方を同じホスト上で併用できます。docs/ROUTING.md では、SAP のツール名とこちらのツール名の対応を示しています。

SAP Help ページ「Model Context Protocol Tools」に記載されている名称です(2026 年 9 月時点)。SAP のサーバーは、作成、アクティブ化、テスト、チェック、移送を行います。ソースの読み取りや検索、ソースの書き込み、ロック、ダンプの表示は行いません。これらの機能は、このサーバーでのみ利用できます。

SAP 公式ツールabap-adt-mcp のツール
abap_lists_destinationslistSystems、systemProfile
abap_creation-get_all_creatable_objects、abap_creation-get_object_type_detailsobjectTypes、creatableTypeDetails
abap_creation-run_validation、abap_creation-create_objectvalidateNewObject、createObject
abap_activate_objectsactivateByName、activateObjects、activatePackage
abap_run_unit_testsunitTestRun、unitTestEvaluation
abap_transport-create、abap_transport-getcreateTransport、resolveTransport、transportInfo、transportDetails、userTransports
abap_transport-unifiedDifferencetransportUnifiedDiff
abap_generators-list_generators、abap_generators-get_schema、abap_generators-generate_objectsrapGenIsAvailable、rapGenGetSchema、rapGenValidateContent、rapGenPreview、rapGenGenerate
abap_business_services-fetch_services、abap_business_services-fetch_service_informationfetchServiceDetails、bindingDetails
abap_atc_run、abap_atc_get_resultcreateAtcRun、atcWorklists、atcSummary
abap_atc_execute_deterministic_quickfixesatcQuickfixProposals、atcApplyQuickfix
abap_atc_apply_ai_fix、abap_atc_get_ai_fix_result(Joule ライセンス)同等のツールはありません。モデルが検出内容を読み取り(atcDocumentation)、ソースを自ら編集します(editObjectSource)
SAP のサーバーにはない機能:ソースの読み取りと検索、ソースの書き込み、ロック、ダンプ、データ、使用箇所、デバッガー、abapGit、Clean Core チェックgetObjectSource、searchObject、sourceTextSearch、grepPackage、setObjectSource、editObjectSource、lock、dumps、runQuery、whereUsed、デバッガーおよび abapGit のツールセット、apiReleaseState

SAP API ポリシー

  • SAP の説明。 このサーバーが呼び出す ADT REST サービス(/sap/bc/adt)は、Eclipse ADT が使用しているものです。SAP はこれらを SAP Business Accelerator Hub に掲載していません。2026 年 4 月の SAP API ポリシーでは、未公開のインターフェースと、SAP が承認するアーキテクチャ以外で AI エージェントが API を使用することを制限しています。このポリシーに関する SAP の FAQ では、ADT API は内部向けであり、承認済みのチャネルを通じた開発に限られるとされています。また、第三者の MCP サーバーは列挙されたチャネルに含まれていません。同じ FAQ では、一般に第三者の MCP サーバーを許可し、未公開のインターフェースの使用は自己責任であるとしています。
  • 利用者への影響。 SAP が利用を認めるかどうかは、このプロジェクトではなく、SAP の担当者に確認してください。
  • 対応方法。 SAP に確認し、開発システムおよびテストシステムでの開発作業に限ってサーバーを使用してください。

サーバー側で行うこと:ログインした SAP ユーザーとして実行し、SAP の認可チェックを回避しません。接続先で許可されるまではテーブルデータを読み取りません。接続先への呼び出しは一度に 1 つずつ実行します。また、apiReleaseState はチェックしたすべての SAP オブジェクトに released、classic、notReleased、prohibited のいずれかを付与します。docs/API-POLICY.md では、ポリシーを項目ごとに説明し、SAP に確認する質問と保守的な設定を紹介しています。

トラブルシューティング

  • ホストにサーバーが表示されません。 ホストの MCP ログを確認してください。Claude Desktop は macOS では ~/Library/Logs/Claude に、Windows では %APPDATA%\Claude\logs に mcp.log と mcp-server-abap-adt-mcp.log を書き込みます。Claude Code では /mcp で状態を確認できます。Claude Desktop が設定を読み込むのは起動時のみです。変更するたびに終了して、再度起動してください。
    • spawn npx ENOENT:Node.js がインストールされていないか、アプリから参照できる PATH にありません。インストールするか、command に npx の絶対パスを指定してください(Windows では C:/Program Files/nodejs/npx.cmd、macOS では /usr/local/bin/npx または /opt/homebrew/bin/npx)。
    • EBADENGINE:ホストが見つけた Node のバージョンが 22.12 より古いです。
    • No ABAP systems configured:SAP_SYSTEMS_FILE が存在しないファイルを指しています(Windows では systems.json.txt になっていないか確認してください)。
    • is not valid JSON:余分なコンマがあるか、Windows のパスを単一のバックスラッシュで記述しています。
  • ブラウザーウィンドウが表示されない、または SSO に失敗します。 Chromium ブラウザーがインストールされている必要があります。自動検出に失敗する場合は、SAP_BROWSER_PATH で指定してください。テナントから完全にログアウトするには、ホームディレクトリの .abap-adt-mcp 内にある sso/<host> フォルダーを削除します(Windows では C:\Users\<you>)。ディスプレイのないマシン(CI ランナーやコンテナー)では、ログインはすぐに拒否され、代わりに oauth または sso2 の名前が示されます。
  • ログインは成功しますが、その後すべて「not authorized」または「not found」になります。 SSO セッションが client で指定されたものとは別のクライアントに接続されています。client をテナントのログオンクライアントに設定してください。
  • kind: "sessionExpired" が繰り返し表示されます。 サーバーはすでに再認証を行い、一度リトライしています。その接続先に対して login を呼び出すようモデルに指示してください。以前のセッションのロックハンドルは無効です。再度ロックしてください。
  • 別のセッションによって kind: "locked" になっています。 listLocks にはサーバー自身のロックが表示されます。オブジェクトが表示されない場合、ロックしているのは別のセッション(Eclipse または別のユーザー)であり、そのセッションまたは SM12 からのみ解除できます。
  • kind: "policyDenied" です。 接続先の policy が呼び出しを禁止しており、メッセージには制限の理由が示されています。ガードレールは機能しています。tableContents と runQuery は、開放されていないすべての接続先(policy がない接続先を含む)で拒否されます。メッセージには設定するキーが示されます。
  • ツールが使用不可、または有効になっていないため拒否されます。 「Not available on destination」:そのテナントには該当する ADT コレクションがありません(systemProfile に表示されます)。「Belongs to toolset ... which is not enabled」:ツールセットを MCP_TOOLSETS に追加するか、MCP_TOOLSETS=all を使用してください。
  • オンプレミスで証明書エラー(kind: "tlsCertificate")が発生します。 ヒントには接続先と修正方法が示されます。不明な発行者の場合は tls.ca(ヒントに openssl の行が含まれます)、名前の不一致の場合は tls.servername、証明書の期限切れの場合は STRUST で更新してください。
  • ロックは成功したのに、古いオンプレミスシステムで書き込みが invalid lock handle で失敗します。 SAP_BASIS が 7.51 より古い場合、HTTP リクエスト間でロックが保持されません。接続先を RFC トランスポートに切り替えてください:docs/RFC.md。
  • editObjectSource の一致件数が 0 件または複数件になります。 何も書き込まれていません。アンカーには SAP 上の現在のテキストと完全に一致する内容を指定してください。インデントも含めます。複数件一致する場合は、周囲の行をさらに含めてください。
  • ユーザーが表示できるテーブルで runQuery が失敗します。 データプレビューでは、dataMaintenance が制限されているテーブルは拒否されます。tableContents を使用してください。

メッセージの正確な内容を含むその他の事例については、docs/TROUBLESHOOTING.md を参照してください。

テストとコントリビューション

git clone https://github.com/williansaez/abap-adt-mcp.git
cd abap-adt-mcp
npm ci
npm run build
npm test
  • Jest のスイートでは、ハンドラー、エラーヒント、レスポンスサイズ、ツールセット、カタログの契約をカバーしています。CI では Node 22 と 24 でテストを実行し、コンテナーイメージをビルドします。
  • ツールを変更した後は、npm run tools:docs を実行し、再生成された docs/TOOLS.md、スナップショット、README のカタログ(翻訳版 README を含む)をコミットしてください。
  • npm run docs:check はドキュメントのチェックゲートです。顧客識別情報や em ダッシュが含まれていないこと、リンク切れがないこと、すべての環境変数が server.json で宣言されていることを確認します。
  • リリースはタグを起点に行います。npm にはプロベナンス付きのトラステッドパブリッシングを使用し、GHCR イメージと MCP レジストリエントリーも公開します。
  • フォークし、ブランチを作成して、プルリクエストを送ってください。詳細は CONTRIBUTING.md をご覧ください。docs/FIELD-NOTES.md へのセッションレポートも歓迎します。顧客名、テナント、トランスポート番号は記載しないでください。

英語版 README は、ポルトガル語版およびドイツ語版の基準です。ロードマップは docs/ROADMAP.md に、各リリースの情報は CHANGELOG.md にあります。

クレジット

このサーバーは、実際のランドスケープで使用し、見つけたことをフィードバックしてくださる方々とともに成長しています。

  • João Gementi は、ヘッドレスの sso2 モード(SNC を通じてすでに認証済みの、名前付きオンプレミスユーザーが、ブラウザーも保存済みパスワードも使わずに接続できるモード)を実装し、Cookie クライアントも強化しました。このクライアントは、SAP セッションを設定済みのオリジン外に持ち出すリクエストを拒否します。
  • Alexandre Leite は、マイルストーン 2.1.0 のきっかけとなった Secure Login Client のシナリオを報告し、オンプレミス認証の各経路をテストしました。
  • mario-andreschak による元の mcp-abap-abap-adt-api サーバーを基に、このプロジェクトは始まりました。

何かを見つけた方、修正した方、あるいはここにいる誰も使ったことのないランドスケープでモードを実行した方は、イシューまたはプルリクエストを送ってください。CONTRIBUTING.md もご覧ください。

ライセンス

MIT。Marcello Urbani による abap-adt-api を基盤としています。このプロジェクトで時間を節約できた場合は、作者をスポンサーすることができます。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。