abap-adt-mcp について
abap-adt-mcpは、ABAP開発者向けにMCPホストをSAP ADTサービスへ接続します。コード編集、テスト、トランスポート、診断を扱い、接続先ごとの書き込み制限をサーバー側で適用します。
主な機能
- 01ABAPソースの読み取りと編集
- 02オブジェクト作成と単体テスト
- 03ATCチェックとクイックフィックス
- 04トランスポート・ダンプ・使用状況の調査
- 05接続先とパッケージのポリシー適用
活用シーン
- 01クラスを編集してテストを実行
- 02ATCでパッケージをチェック
- 03ショートダンプからソースを追跡
- 04リリース前にトランスポートを確認
MCP 対応
Claude Desktop、Claude Code、VS CodeなどのMCPホストに、SAP ADT操作をMCPツールとして提供します。接続先のポリシーはSAPへの呼び出し前にサーバーが適用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y abap-adt-mcpSAP_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.jsonSAP_SYSTEMSシークレットInline JSON map of destinations (same shape as SAP_SYSTEMS_FILE). Contains credentials — prefer SAP_SYSTEMS_FILESAP_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 oauthMCP_HTTP_PORTWhen set (1024-65535), serve Streamable HTTP on http://127.0.0.1:<port>/mcp with bearer-token auth instead of stdioMCP_HTTP_HOSTBind address for the HTTP transport (default 127.0.0.1). Set 0.0.0.0 only inside containers that publish the portMCP_HTTP_TOKENシークレットBearer token for the HTTP transport; auto-generated and written to ~/.abap-adt-mcp/http-token when unsetMCP_HTTP_MAX_SESSIONSMaximum concurrent MCP sessions on the HTTP transport (default 16); further initialize requests get 503MCP_HTTP_MAX_BODY_BYTESLargest request body the HTTP transport accepts, in bytes (default 4194304); larger bodies are refused with HTTP 413MCP_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 directoryMCP_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.jsonMCP_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 focusedMCP_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 outputsSAP_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:44300SAP_USERLegacy single-system mode: SAP usernameSAP_PASSWORDシークレットLegacy single-system mode: SAP passwordSAP_CLIENTLegacy single-system mode: SAP client number, e.g. 100SAP_LANGUAGELegacy single-system mode: logon language, e.g. ENSAP_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 providerSAP_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 idSAP_OAUTH_CLIENT_SECRETシークレットLegacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 client secretSAP_OAUTH_SCOPEシークレットLegacy single-system mode with SAP_AUTH_TYPE=oauth: optional OAuth2 scopeMCP_PROFILE_GATEPlatform gate for toolsets the destination does not expose (debugger, traces, abapGit, ...): enforce (default, refuse before calling SAP), warn (log only) or offMCP_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
2掲載時のツール一覧 · 2 日前に更新
このツールにパラメーターはありません。
詳細
abap-adt-mcp
Claude で SAP システム上の ABAP コードの読み取り、書き込み、テスト、チェックができます。
English · Português (Brasil) · Deutsch · プロジェクトサイト
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 への呼び出しの前にポリシーを強制するため、不用意なプロンプトによってポリシーで禁止された場所に書き込まれることはありません(管理者向け)。
動作を見る

これが基本的な仕組みです。一文を入力すると、モデルがツールを選び、サーバーがオブジェクトをロックして、書き込み、有効化、ロック解除を行います。ユニットテストはトランスポート番号とともに成功として返ってきます。同じ変更を本番システムに依頼すると、SAP への呼び出しが 1 回も行われる前に policyDenied が返されます。ガードレールはチャットウィンドウではなく、サーバーにあります。
7 本の短い動画では、これらの一連の処理と、それを構成する個々の作業を紹介しています。短いダンプの発生行の特定、クイックフィックスを含む ATC の実行、トランスポートのレビュー、テスト付きクラスの作成、ABAP Cloud の対応状況チェックなどです。動画はプロジェクトサイトでご覧いただけます。
目次
- 動作を見る
- セットアップ
- モデルへの依頼例
- 管理者向け
- 認証
- S/4HANA Cloud とオンプレミスの違い
- その他のインストール方法
- 設定
- ツールカタログ
- SAP 公式 ADT MCP Server との比較
- SAP API ポリシー
- トラブルシューティング
- テストとコントリビューション
- クレジット
- ライセンス
セットアップ
前提条件は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(ターミナルは不要です):
- [Settings]>[Developer]>[Edit Config]を開くと、
claude_desktop_config.jsonがあるフォルダーが開きます。ファイルをメモ帳または任意のエディターで開いてください。[Settings]に[Developer]タブがない場合、Claude Desktop は IT 部門によって管理されています。以下のエントリーを追加するよう依頼してください。 - ファイルにすでに
"mcpServers"が含まれている場合は、その中に"abap-adt-mcp"エントリーだけを追加します。ファイルが空の場合は、ブロック全体を貼り付けてください。 <you>をユーザー名に置き換えます(macOS:/Users/<you>/.abap-adt-mcp/systems.json)。Windows のパスでスラッシュを使っているのは意図的です。JSON ではバックスラッシュごとに\\が必要ですが、スラッシュはそのまま使えます。- アプリを終了して、再度開きます。
{
"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 は引き続き許可されます。以下のキーを使って閉じてください。 |
allowDataPreview | true でない限り無効です。tableContents は、名前を指定してテーブルまたは CDS エンティティの行を読み取れます。明示的な false は MCP_ALLOW_DATA_PREVIEW より優先されます。 |
allowFreeSql | true でない限り無効です。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、timeoutMs | Basis による SNC マッピング、チケット受け入れ、ADT ICF ログオンの設定 |
basic | オンプレミスの AS ABAP ユーザー、S/4HANA Cloud Communication User | user と password(${env:VAR} として指定) | ADT 権限を持つユーザー |
oauth | S/4HANA Cloud の無人クライアント | oauth.tokenUrl、clientId、clientSecret | Communication 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 のツールセット一式を使用できます。 |
| リリース済み API | apiReleaseState は、名前、オブジェクト 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_ONLY | 1 にするとすべての接続先が読み取り専用になります | オフ |
MCP_ALLOW_DATA_PREVIEW、MCP_ALLOW_FREE_SQL | キーを明示していない接続先で、テーブルデータまたは SQL を利用可能にするには 1 を指定します | オフ |
MCP_AUDIT_FILE | JSONL 監査ログ | オフ |
MCP_MAX_RESPONSE_CHARS | ページ分割を行うまでの、1 つのツール応答の文字数上限 | 40000 |
MCP_HTTP_PORT | stdio の代わりに、ベアラートークンを使用して 127.0.0.1:<port>/mcp で Streamable HTTP を提供します | 未設定(stdio) |
SAP_BROWSER_PATH | SSO:使用する 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_destinations | listSystems、systemProfile |
abap_creation-get_all_creatable_objects、abap_creation-get_object_type_details | objectTypes、creatableTypeDetails |
abap_creation-run_validation、abap_creation-create_object | validateNewObject、createObject |
abap_activate_objects | activateByName、activateObjects、activatePackage |
abap_run_unit_tests | unitTestRun、unitTestEvaluation |
abap_transport-create、abap_transport-get | createTransport、resolveTransport、transportInfo、transportDetails、userTransports |
abap_transport-unifiedDifference | transportUnifiedDiff |
abap_generators-list_generators、abap_generators-get_schema、abap_generators-generate_objects | rapGenIsAvailable、rapGenGetSchema、rapGenValidateContent、rapGenPreview、rapGenGenerate |
abap_business_services-fetch_services、abap_business_services-fetch_service_information | fetchServiceDetails、bindingDetails |
abap_atc_run、abap_atc_get_result | createAtcRun、atcWorklists、atcSummary |
abap_atc_execute_deterministic_quickfixes | atcQuickfixProposals、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 を基盤としています。このプロジェクトで時間を節約できた場合は、作者をスポンサーすることができます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。