Skip to main content
Glama
xiaoliang2

dsh-abap-mcp

by xiaoliang2

dsh-abap-mcp

⚠️ 実験段階 · EXPERIMENTAL

本プラグインはまだ実験段階(Experimental)であり、開発/テスト(Dev / Test)環境専用です。

  • 本番システムに直接接続しないでください。 デフォルトでは読み取り専用でも、読み取り専用ツールで本番システムのソースコードや業務データを読み取ることができます。

  • 最小権限(least-privilege)の SAP アカウント で接続してください。

  • 書き込み権限スイッチ(sourceWrite / transports / refactor / exec / git / debug / serviceBinding)はデフォルトですべて無効で、開発システム上でのみ必要に応じて慎重に有効化してください。

  • パスワードはローカルの settings.yaml に平文で書き込まれるため、認証情報のセキュリティに注意してください。

本プラグインの使用により、上記のリスクを理解し、自己責任で使用することに同意したものとみなされます。

DeepSeek Harness プラグイン:MCP を介して SAP ABAP ADT に接続し、DSH 内で SAP の ABAP オブジェクトを直接照会・閲覧できます。デフォルトでは厳格な読み取り専用で、7 種類の書き込み権限は設定可能なスイッチとして提供されます。

アップストリームサーバー:mario-andreschak/mcp-abap-abap-adt-api 本プラグインは server/ 内に権限レイヤーを追加したサーバーコピー(デフォルト読み取り専用 + スイッチ)を内蔵し、接続、ツール登録、設定変更に伴う再接続を担当します。


アーキテクチャ

DSH 设置页卡片(ABAP MCP)
        │  settingsScope.set(...)   ←→  settings/updated
        ▼
Host 插件 lib/index.js
  1. settings.register("abap-mcp", schema)   # 连接配置 + 7 类权限开关 + 状态
  2. spawn `node server/dist/index.js`(StdioClientTransport,env=SAP_* + MCP_ABAP_PERMISSIONS)
  3. MCP Client 连接,把服务器工具注册为 mcp__abap__<tool>
  4. 配置变更 → 去抖重连;连接断开 → 有界退避重试
        ▼
server/dist/index.js(MCP 服务器,权限在这里强制生效)
  - MCP_ABAP_PERMISSIONS 未设置 → 默认只读(约 75 个只读工具)
  - 7 类写权限通过 MCP_ABAP_PERMISSIONS 的 JSON 开关启用
  • 権限の単一情報源はサーバー側:Host はスイッチ値をサーバーに透過するだけで、ツールリストと呼び出しは権限に基づいてフィルタリング/拒否されます。DSH を迂回してサーバーに直接接続しても、権限は有効です。

  • ツール命名:mcp__abap__<ツール名>(例:mcp__abap__searchObject)。

Related MCP server: abap-adt-mcp

権限モデル(デフォルト = 厳格な読み取り専用)

権限モデルは server 側で強制されます(server/src/permissions.ts → dist/permissions.js)。デフォルトの読み取り専用コアは常に有効で、7 種類の書き込み権限はデフォルトで全て無効、MCP_ABAP_PERMISSIONS 環境変数でカテゴリごとに有効化します。未登録のツールはすべて拒否(deny-by-default)され、新しく追加されたハンドラが黙って開放されることはありません。

読み取り専用コア(約 75 ツール、常時有効)

サブグループ

ツール

説明

認証 / セッション

login logout dropSession

ログイン / ログアウト / ローカルセッションキャッシュのクリア

オブジェクト探索

objectStructure searchObject findObjectPath objectTypes reentranceTicket

オブジェクト構造の照会 / 検索 / パス特定 / オブジェクトタイプ / 再入チケット

クラスイントロスペクション

classIncludes classComponents

クラスの include 構成 / コンポーネント一覧

コード分析(読み取り専用)

syntaxCheckCode syntaxCheckCdsUrl codeCompletion findDefinition usageReferences syntaxCheckTypes codeCompletionFull codeCompletionElement usageReferenceSnippets fixProposals fixEdits fragmentMappings abapDocumentation

構文チェック / 補完 / 定義ジャンプ / 参照照会 / 修正提案 / ドキュメント(読み取り専用)

ソースコード読み取り

getObjectSource

オブジェクトソースの読み取り

非アクティブオブジェクト

inactiveObjects

未アクティブ化オブジェクトの一覧

登録 / 検証

objectRegistrationInfo validateNewObject

オブジェクト登録情報 / 新規オブジェクトパラメータ検証(読み取り専用)

トランスポート読み取り

transportInfo hasTransportConfig transportConfigurations getTransportConfiguration userTransports transportsByConfig systemUsers transportReference

トランスポートリクエスト情報 / ユーザートランスポート / 設定 / システムユーザー(読み取り専用)

リポジトリブラウズ

nodeContents mainPrograms

オブジェクトツリーブラウズ / include メインプログラム

機能 / ディスカバリ

featureDetails collectionFeatureDetails findCollectionByUrl loadTypes adtDiscovery adtCoreDiscovery adtCompatibiliyGraph

ADT 能力ディスカバリ / 機能照会

単体テスト結果読み取り

unitTestEvaluation unitTestOccurrenceMarkers

単体テスト結果の評価 / マーカー位置(読み取り専用)

フォーマット設定読み取り

prettyPrinterSetting

フォーマット設定の読み取り(変更なし)

Git 読み取り

gitRepos gitExternalRepoInfo checkRepo remoteRepoInfo

リポジトリ一覧 / リモート情報 / チェック(読み取り専用)

DDIC 読み取り

annotationDefinitions ddicElement ddicRepositoryAccess packageSearchHelp

アノテーション / DDIC 要素 / パッケージ検索(読み取り専用)

サービスバインディング詳細

bindingDetails

サービスバインディング詳細(読み取り専用)

データ読み取り

tableContents runQuery

テーブルデータ / SQL クエリ(読み取り専用)

Feeds / Dumps

feeds dumps

動的オブジェクト一覧 / 短いダンプ一覧

リネーム分析

renameEvaluate renamePreview

リネーム評価 / プレビュー(実行のみで書き込みなし)

ATC 読み取り

atcCustomizing atcCheckVariant atcWorklists atcUsers isProposalMessage atcContactUri

ATC チェック設定 / バリアント / ワークリスト / ユーザー / 連絡先(読み取り専用)

トレース読み取り

tracesList tracesListRequests tracesHitList tracesDbAccess tracesStatements

トレース一覧 / リクエスト / ヒット / DB アクセス / ステートメント(読み取り専用)

リビジョン / ヘルス

revisions healthcheck

オブジェクトリビジョン履歴 / 接続ヘルスチェック

7 種類の書き込み権限(デフォルトすべて無効)

スイッチ

サブカテゴリ

ツール

説明

sourceWrite

ソース書き込み

setObjectSource deleteObject activateObjects activateByName createObject createTestInclude lock unLock

ソース書き込み / オブジェクト削除 / アクティベート / オブジェクト作成 / テストインクルード作成 / ロックとロック解除

transports

トランスポート要求

createTransport setTransportsConfig createTransportsConfig transportDelete transportRelease transportSetOwner transportAddUser

作成 / 設定 / 削除 / リリース / 責任者変更 / ユーザー追加

refactor

リファクタリング

renameExecute extractMethodEvaluate extractMethodPreview extractMethodExecute prettyPrinter setPrettyPrinterSetting

名前変更実行 / メソッド抽出(評価/プレビュー/実行)/ フォーマット(読み書き)

exec

実行系

runClass unitTestRun

ABAP クラス実行 / 単体テスト実行

ATC 書き込み操作

createAtcRun atcExemptProposal atcRequestExemption atcChangeContact

ATC チェック開始 / 免除提案 / 免除要求 / 連絡先変更

トレース設定

tracesSetParameters tracesCreateConfiguration tracesDeleteConfiguration tracesDelete

トレースパラメータ設定 / 設定作成 / 設定削除 / レコード削除

git

Git 書き込み操作

gitCreateRepo gitPullRepo gitUnlinkRepo stageRepo pushRepo switchRepoBranch

リポジトリ作成 / プル / リンク解除 / ステージ / プッシュ / ブランチ切り替え

debug

デバッグ

debuggerListeners debuggerListen debuggerDeleteListener debuggerSetBreakpoints debuggerDeleteBreakpoints debuggerAttach debuggerSaveSettings debuggerStackTrace debuggerVariables debuggerChildVariables debuggerStep debuggerGoToStack debuggerSetVariableValue

リスナー / ブレークポイント / アタッチ / ステップ / スタック / 変数の読み書き

serviceBinding

サービスバインディング

publishServiceBinding unPublishServiceBinding

OData サービスバインディングの公開 / 公開解除

説明:読み取り専用コア内の「ATC 読み取り」「トレース読み取り」「Git 読み取り」「トランスポート読み取り」は読み取りのみ可能。対応するカテゴリ内の書き込みツール(チェック開始、設定変更、コードプッシュ、サービス公開など)には権限が必要。名前変更前にプレビューのみ行う場合(renameEvaluate/renamePreview)は読み取り専用で、実際に実行する場合(renameExecute)のみ refactor が必要。

権限の手動確認(AI による権限の自動有効化を防止)

任意の権限スイッチを有効にする際、プラグインは手動確認を要求する:設定ページのカードでチェックを入れると、一回限りの確認資格情報(confirm-<タイムスタンプ>-<ランダム文字列>)が生成され設定に書き込まれる。Host 側は資格情報が新しい(60 秒以内)かつ形式が正しい場合にのみ、対応するモードでの接続を許可する。それ以外の場合は強制的に読み取り専用へフォールバックし、ステータスに「設定カードで手動確認が必要」と表示する。この仕組みは全 7 種類の権限スイッチ(sourceWrite / transports / refactor / exec / git / debug / serviceBinding)を一律にカバーする。

  • 権限は設定ページのカードからのみ有効化できる。settings API / settings.yaml の直接変更 / 会話中にモデルに permissions を変更させる方法で有効化しようとすると、有効な資格情報がないため拒否される。

  • 資格情報は 60 秒の有効期限があり、再起動後は自動的に失効するため、カードで再度操作する必要がある。

  • 全権限を無効化(全オフに戻す)には確認は不要で、常に許可される。

インストール

npm から(正式パッケージ)

dsh plugin add @xiaobanli/dsh-abap-mcp

ローカルディレクトリ(開発/結合テスト)

profile の package.json に依存関係を追加し、pnpm install を実行する:

{
  "dependencies": {
    "@xiaobanli/dsh-abap-mcp": "link:C:/othersoftware/harness/harness/project6/dsh-abap-mcp"
  },
  "dsh": { "profile": { "bundles": [ "...", "dsh-abap-mcp" ] } }
}

DSH を再起動すると、設定ページの左側に「ABAP MCP」カードが表示される。

設定(設定ページのカード)

事前準備(接続前に確認してください)

  1. SAP 側でトランザクションコード SICF にて ADT サービスノードを有効化する:プラグインは ABAP Development Tools (ADT) の HTTP(S) サービスを介して SAP にアクセスするため、関連する ADT サービスノードがアクティブでないと接続が失敗する。通常は SICF で default_host/sap/bc/adt とそのサブノードをアクティブ化すればよい(具体的なノードはシステムバージョンによって多少異なる)。

  2. SAP アドレスの形式:大半は http://アドレス:ポート または https://アドレス:ポート(一部の高バージョン/ゲートウェイ設定では http://アドレス:ポート/sap/bc/adt の完全パス)。実際のシステムに合わせてプロトコルとポートを確認してください。例:http://10.0.0.1:8000 または https://sap.example.com:44300。

フィールド

説明

接続を有効化

全体スイッチ。オフの場合は接続せず、ツールも一切登録しない

SAP アドレス

例:http://アドレス:ポート / https://アドレス:ポート(先に ADT サービスを有効化する必要あり)

ユーザー名 / パスワード

接続資格情報

クライアント / 言語

例:000 / EN

7 種類の書き込み権限スイッチ

チェックすると対応する書き込み機能が有効になる

保存後、Host は自動的に再接続する。また、会話内で直接モデルに abap_mcp_status を尋ねて接続状態を確認することもできる。

「接続テスト」ボタン:まず現在のフォームをディスクに保存し、現在の設定で実際の spawn→接続→ツール列挙→切断を 1 回実行する。結果(成功/失敗、所要時間、ツール数)はボタンの横に表示される。「接続を有効化」スイッチの状態は変更しない。

  • SAP アドレス / ユーザー名 / パスワードが未入力の場合、ボタンは「先に設定を入力してください」と直接表示し、空のテストは実行しない。

  • テスト実行中はボタンに「テスト中…」と表示される。60 秒で結果が出ない場合は自動的にタイムアウトと判定され、その旨が表示される。

  • テスト結果(status.lastTest)はボタンの横に表示され続け、再接続状態の更新によって消去されることはない。

  • テストは一回限りの動作:永続接続や自動再接続はトリガーされず、テスト失敗時にバックオフ再試行に入ることもない。永続接続と制限付き再接続(最大 5 回で断念)がトリガーされるのは、設定変更(有効化スイッチ/接続フィールド/権限)があった場合のみ。

サーバーのビルド(server/ を変更した場合)

cd server
npm install --ignore-scripts   # 依赖均为纯 JS,无需生命周期脚本
node node_modules/typescript/bin/tsc -p tsconfig.json   # 产出 dist/

トラブルシューティング

「接続テスト」がずっと「テスト中…」のまま、またはクリックしても反応がない

  • 原因の大半は設定の書き込みがディスクに保存されていないこと。SAP アドレス / ユーザー名 / パスワードがすべて入力されていることを確認してください。プラグインは設定をローカルの settings.yaml に書き戻します。

  • 繰り返し固まる場合は、DSH ログに SettingsConflictError(設定のリビジョン競合により書き込みが破棄された)がないか確認してください。DSH を再起動してもう一度試してください。

接続で McpError: Connection closed が発生する

  • デスクトップ版ホストは Electron 上で動作するため、子プロセスは Node モードで起動する必要があります(プラグインが自動的に ELECTRON_RUN_AS_NODE=1 を設定済み)。

  • それでも発生する場合は、server/dist/index.js が存在することを確認してください(server/ のソースを変更していなければ再ビルドは不要)。node server/dist/index.js を直接実行してターミナルで待機状態になれば、サーバー自体は正常です。

書き込み権限スイッチを有効にしたのに、対応するツールが表示されない

  • 権限が実際に有効になるのはサーバー側です。スイッチを保存するとプラグインは再接続し、ツールを再列挙します(ツール数が増えるはずです。例:75 → 83)。

  • 権限を有効にしてもツール数が変わらない場合は、abap_mcp_status の mode が read-only + <カテゴリ> に変わっているか確認してください。まだ read-only のままなら、スイッチが正しく保存されていません。

server/ のソースを変更したのにツールの動作が変わらない

  • 再ビルドが必要です:cd server && npm install --ignore-scripts && node node_modules/typescript/bin/tsc -p tsconfig.json を実行し、その後 DSH を再起動してプラグインが新しい dist/ を使用するようにしてください。

実行時に ABAP で STRING_OFFSET_TOO_LARGE などのエラーが発生する

  • この種のエラーは SAP 側で読み取り/実行される ABAP プログラム自体に起因するもので、プラグインとは無関係です。mcp__abap__dumps で短ダンプの詳細を確認するか、SE38 で該当プログラムを修正してください。

セキュリティについて

  • 読み取り専用 ≠ 無害:読み取り専用ツールでも、本番システムのソースコードや業務データを読み取る可能性があります。開発/テストシステムへの接続と、最小権限アカウントの使用を強く推奨します(権限スイッチは DSH 側のガードレールであり、SAP 側の認可を代替するものではありません)。

  • サーバーは起動時に権限モードと「開発/テストシステム専用の使用を推奨」という注意書きを出力します(これは推奨 + 注意であり、強制ではありません)。

  • パスワードはローカルの settings.yaml に平文で書き込まれます(DSH の settings サービスによって永続化されます)。より高いセキュリティレベルが必要な場合は、credentials サービスによる保存に拡張してください。

  • サーバーの子プロセスは、SDK のホワイトリスト環境変数と、本プラグインが明示的に注入する SAP_* および MCP_ABAP_PERMISSIONS のみを継承し、ホストのその他の環境変数は漏洩しません。

License

MIT。サーバー部分の著作権は原作者 mario-andreschak(MIT)に帰属し、本プラグインはその上に権限レイヤーを追加したものです。

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants like Claude Code to directly connect to SAP ABAP systems via the ADT REST API with read/write capabilities, featuring AI-friendly high-level tools and built-in safety measures such as read-only mode, prefix whitelisting, and automatic locking.
    9
    396 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.
    24
    396 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to work with SAP ABAP systems through the ADT REST API, supporting repository search, source code read/write, activation, syntax checks, and transport request management.
    1
    Apache 2.0