dsh-abap-mcp
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 ツール、常時有効)
サブグループ | ツール | 説明 |
認証 / セッション |
| ログイン / ログアウト / ローカルセッションキャッシュのクリア |
オブジェクト探索 |
| オブジェクト構造の照会 / 検索 / パス特定 / オブジェクトタイプ / 再入チケット |
クラスイントロスペクション |
| クラスの include 構成 / コンポーネント一覧 |
コード分析(読み取り専用) |
| 構文チェック / 補完 / 定義ジャンプ / 参照照会 / 修正提案 / ドキュメント(読み取り専用) |
ソースコード読み取り |
| オブジェクトソースの読み取り |
非アクティブオブジェクト |
| 未アクティブ化オブジェクトの一覧 |
登録 / 検証 |
| オブジェクト登録情報 / 新規オブジェクトパラメータ検証(読み取り専用) |
トランスポート読み取り |
| トランスポートリクエスト情報 / ユーザートランスポート / 設定 / システムユーザー(読み取り専用) |
リポジトリブラウズ |
| オブジェクトツリーブラウズ / include メインプログラム |
機能 / ディスカバリ |
| ADT 能力ディスカバリ / 機能照会 |
単体テスト結果読み取り |
| 単体テスト結果の評価 / マーカー位置(読み取り専用) |
フォーマット設定読み取り |
| フォーマット設定の読み取り(変更なし) |
Git 読み取り |
| リポジトリ一覧 / リモート情報 / チェック(読み取り専用) |
DDIC 読み取り |
| アノテーション / DDIC 要素 / パッケージ検索(読み取り専用) |
サービスバインディング詳細 |
| サービスバインディング詳細(読み取り専用) |
データ読み取り |
| テーブルデータ / SQL クエリ(読み取り専用) |
Feeds / Dumps |
| 動的オブジェクト一覧 / 短いダンプ一覧 |
リネーム分析 |
| リネーム評価 / プレビュー(実行のみで書き込みなし) |
ATC 読み取り |
| ATC チェック設定 / バリアント / ワークリスト / ユーザー / 連絡先(読み取り専用) |
トレース読み取り |
| トレース一覧 / リクエスト / ヒット / DB アクセス / ステートメント(読み取り専用) |
リビジョン / ヘルス |
| オブジェクトリビジョン履歴 / 接続ヘルスチェック |
7 種類の書き込み権限(デフォルトすべて無効)
スイッチ | サブカテゴリ | ツール | 説明 |
| ソース書き込み |
| ソース書き込み / オブジェクト削除 / アクティベート / オブジェクト作成 / テストインクルード作成 / ロックとロック解除 |
| トランスポート要求 |
| 作成 / 設定 / 削除 / リリース / 責任者変更 / ユーザー追加 |
| リファクタリング |
| 名前変更実行 / メソッド抽出(評価/プレビュー/実行)/ フォーマット(読み書き) |
| 実行系 |
| ABAP クラス実行 / 単体テスト実行 |
ATC 書き込み操作 |
| ATC チェック開始 / 免除提案 / 免除要求 / 連絡先変更 | |
トレース設定 |
| トレースパラメータ設定 / 設定作成 / 設定削除 / レコード削除 | |
| Git 書き込み操作 |
| リポジトリ作成 / プル / リンク解除 / ステージ / プッシュ / ブランチ切り替え |
| デバッグ |
| リスナー / ブレークポイント / アタッチ / ステップ / スタック / 変数の読み書き |
| サービスバインディング |
| OData サービスバインディングの公開 / 公開解除 |
説明:読み取り専用コア内の「ATC 読み取り」「トレース読み取り」「Git 読み取り」「トランスポート読み取り」は読み取りのみ可能。対応するカテゴリ内の書き込みツール(チェック開始、設定変更、コードプッシュ、サービス公開など)には権限が必要。名前変更前にプレビューのみ行う場合(
renameEvaluate/renamePreview)は読み取り専用で、実際に実行する場合(renameExecute)のみrefactorが必要。
権限の手動確認(AI による権限の自動有効化を防止)
任意の権限スイッチを有効にする際、プラグインは手動確認を要求する:設定ページのカードでチェックを入れると、一回限りの確認資格情報(confirm-<タイムスタンプ>-<ランダム文字列>)が生成され設定に書き込まれる。Host 側は資格情報が新しい(60 秒以内)かつ形式が正しい場合にのみ、対応するモードでの接続を許可する。それ以外の場合は強制的に読み取り専用へフォールバックし、ステータスに「設定カードで手動確認が必要」と表示する。この仕組みは全 7 種類の権限スイッチ(sourceWrite / transports / refactor / exec / git / debug / serviceBinding)を一律にカバーする。
権限は設定ページのカードからのみ有効化できる。
settingsAPI /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」カードが表示される。
設定(設定ページのカード)
事前準備(接続前に確認してください)
SAP 側でトランザクションコード SICF にて ADT サービスノードを有効化する:プラグインは ABAP Development Tools (ADT) の HTTP(S) サービスを介して SAP にアクセスするため、関連する ADT サービスノードがアクティブでないと接続が失敗する。通常は SICF で
default_host/sap/bc/adtとそのサブノードをアクティブ化すればよい(具体的なノードはシステムバージョンによって多少異なる)。SAP アドレスの形式:大半は
http://アドレス:ポートまたはhttps://アドレス:ポート(一部の高バージョン/ゲートウェイ設定ではhttp://アドレス:ポート/sap/bc/adtの完全パス)。実際のシステムに合わせてプロトコルとポートを確認してください。例:http://10.0.0.1:8000またはhttps://sap.example.com:44300。
フィールド | 説明 |
接続を有効化 | 全体スイッチ。オフの場合は接続せず、ツールも一切登録しない |
SAP アドレス | 例: |
ユーザー名 / パスワード | 接続資格情報 |
クライアント / 言語 | 例: |
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)に帰属し、本プラグインはその上に権限レイヤーを追加したものです。
This server cannot be deployed
Maintenance
Related MCP Connectors
Any REST/SOAP/GraphQL/OData/SQL API as MCP tools for Claude & ChatGPT. 385 connectors: SAP, ERP.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
- StackOneOAuthcom.stackone
Give AI agents 30,000+ safe, token-optimized actions across Workday, SAP, Oracle + hundreds more.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables 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.9396 npmMIT
- AlicenseAqualityDmaintenanceEnables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.24396 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables 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.1Apache 2.0
- AlicenseBqualityAmaintenanceEnables LLMs to develop, debug, test, and manage SAP ABAP objects on a live system through the ABAP Development Tools (ADT) protocol.296MIT