mcpField
A
ABAP-ADT-API MCP-Server

ABAP-ADT-API MCP-Server

ローカル
github.com/mario-andreschak開発ツール2086 週間前に更新

ABAP-ADT-API MCP-Server について

ABAP ADT API MCP サーバーは abap-adt-api をもとに、既存の SAP ABAP ツール 127 個を提供し、大きな結果を分割取得するための readResultPage を追加しています。信頼できるローカル運用者を対象とし、stdio 経由で単一の SAP セッションを使用します。読み取りと変更の権限は SAP の認可に従います。

主な機能

  1. 01ABAP オブジェクトと ADT 向けツール 127 個
  2. 02readResultPage による大きな結果の分割取得
  3. 03構文チェックを支える源コードのスナップショット
  4. 04SAP リクエストのタイムアウトとキャンセル制御
  5. 05プライベート CA に対応した TLS 検証

活用シーン

  1. 01エージェントによる ABAP オブジェクトのソースコードの参照と編集
  2. 02DDIC のテーブル構造と内容の確認
  3. 03信頼できる環境での構文チェックとトランスポート関連操作

MCP 対応

本サーバーは ABAP オブジェクト、ソース、DDIC、デバッグ、Git 関連のツールを stdio 経由で MCP クライアントに公開します。HTTP リスナーや MCP OAuth プロバイダーは含まれません。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"abap-abap-adt-api": {
"command": "npx",
"args": [
"-y",
"mcp-abap-abap-adt-api"
],
"env": {
"SAP_URL": "<SAP_URL>",
"SAP_USER": "<SAP_USER>",
"SAP_PASSWORD": "<SAP_PASSWORD>",
"SAP_CLIENT": "<SAP_CLIENT>",
"SAP_LANGUAGE": "<SAP_LANGUAGE>",
"NODE_TLS_REJECT_UNAUTHORIZED": "<NODE_TLS_REJECT_UNAUTHORIZED>"
}
}
}
}
起動コマンドnpx -y mcp-abap-abap-adt-api
設定が必要な環境変数
SAP_URLBase URL of the SAP system, e.g. https://host:44300
SAP_USERSAP username
SAP_PASSWORDシークレットSAP password
SAP_CLIENTSAP client number, e.g. 100
SAP_LANGUAGELogon language, e.g. EN
NODE_TLS_REJECT_UNAUTHORIZEDシークレットSet to 0 to allow self-signed certificates (development only), 1 to enforce TLS verification

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

パッケージ
npmmcp-abap-abap-adt-api0.1.1

ツール

127

掲載時のツール一覧 · 3 週間前に更新

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

詳細

ABAP ADT API MCP サーバー

このサーバーは既存の SAP ABAP ツール 127 個を維持し、大きな結果を扱うための readResultPage を追加します。オブジェクトの CRUD、ロック、アクティベーション、トランスポート、クエリ、デバッグ、リファクタリング、Git、分析は、信頼されたローカルの stdio クライアントが所有する 1 つの SAP セッションを共有します。セッションで読み取りや変更が可能な対象は、SAP の認可によって決まります。

インストールとプロトコル

Node22.22.2+ または24.15.0+ を使用してください。npm ci と npm run build を実行し、MCP クライアントで node を起動するよう設定して、dist/index.js の絶対パスを指定してください。既存の npm/レジストリのリリースには、オーナーがリリースするまでこの PR は含まれません。ここではリリースは公開されていません。

{
  "mcpServers": {
    "abap-adt": {
      "command": "node",
      "args": ["/absolute/path/mcp-abap-abap-adt-api/dist/index.js"],
      "env": {
        "SAP_URL": "https://sap.example.invalid:44300",
        "SAP_USER": "YOUR_USER",
        "SAP_PASSWORD": "YOUR_PASSWORD",
        "SAP_CLIENT": "100",
        "SAP_LANGUAGE": "EN"
      }
    }
  }
}

公開されている TypeScript MCP2.0.0 は、最新の2026-07-28のディスカバリーと従来の2025-11-25の初期化、検証済みツール、キャンセル、適切なエラーに対応しています。このパッケージが公開するのは stdio です。HTTP リスナーでも MCP OAuth プロバイダーでもありません。認証情報がなくてもディスカバリーは可能です。healthcheck が報告するのはローカル設定とセッション復旧状態であり、SAP への接続が検証済みであることではありません。

環境変数は MCP クライアントから渡されます。Dotenv が読み込まれるのは、SAP_ENV_FILE でファイルを明示的に指定した場合のみです。SAP_URL はパス、クエリ、埋め込み認証情報を含まないオリジンです。プライベート CA を使用する場合は、Node の起動前に NODE_EXTRA_CA_CERTS を設定してください。TLS 検証は無効にできません。フィクスチャではループバック HTTP が許可されています。信頼されたプライベート HTTP 環境では SAP_ALLOW_HTTP=1 が必要であり、そのネットワークに認証情報が公開されます。

認可されたブローカーの静的な SAP_BEARER_TOKEN をパスワードの代わりに使用できます。トークンをローテーションするには、プロセスを再起動してください。これは XSUAA グラントを実装するものでも、テナントが受け入れることを証明するものでもありません。パスワードグラントフローは導入されていません。

セッションと制限

同時に実行できる操作は1つだけです。重複した操作にはビジーエラーが返されます。デバッガーのリスナーも、完了またはキャンセルされるまでこのセッションを占有します。SAP_REQUEST_TIMEOUT_MS のデフォルト値は60000で、ログインや各HTTPリクエストを含め、100..120000を指定できます。キャンセルすると実際のソケットが閉じられます。クライアントはリダイレクトに追従せず、環境プロキシを継承せず、変更操作を再試行せず、ステートフルな呼び出しを自動的に再認証しません。書き込みが中断されてもSAP側で変更が反映されている場合があります。書き込みとロックを確認してから、明示的に login、dropSession、または logout を実行して復旧してください。シャットダウン時には制限時間内でログアウトを試みますが、SAPに到達できない場合は、SAP側の有効期限が切れるまで状態が保持されることがあります。

HTTP通信は設定されたオリジン配下の /sap/ に限定され、リクエストは2MiB、レスポンスは4MiBに制限され、TLS検証が行われます。XMLのエンティティ宣言は拒否されます。入力JSONはバイト数、ネスト、配列、フィールドの契約によって制限されます。これは信頼されたオペレーター向けツールであり、OSサンドボックスでもマルチユーザーサービスでもありません。Gitツールは、指定された認証情報を使ってSAPからリモートGitサービスに接続するよう要求できます。これらの操作はSAPとリモート側の権限に依存します。

スキーマは、オブジェクト、配列、オーバーロードを含む、固定された abap-adt-api8.4.3 の宣言から生成されます。オブジェクト引数に対する、以前にドキュメント化されたJSON文字列も引き続き受け付けられ、解析と検証が行われます。トップレベルの不明な引数は拒否されます。scripts/generate-input-contracts.mjs とそのレポートにマッピングが記録されています。依存関係を更新する際は、再実行して内容を確認してください。TypeScript6 のコンパイラーAPIは開発時のみ使用され、アプリケーションのビルドには TypeScript7 が使用されます。

getObjectSource/成功した setObjectSource によるソースのスナップショットは、code が省略された場合に syntaxCheckCode へ渡すことができます(issue#2)。ランタイムごとのキャッシュは8MiB、64件、5分間に制限されています。変更操作やセッション操作を行うと、古いスナップショットは消去されます。スナップショットは最後に確認されたテキストであり、外部の編集がないことを保証するものではありません。アップストリームが空文字列を拒否するため、明示的な空テキストは同等の空行としてチェックされます。結果には emptySourceNormalized が含まれます。ソースオプションは、有効版/無効版を含め、構造化オブジェクトまたはJSONオブジェクトを受け付けます。既存の行ページングも引き続き利用できます。クラスインクルードでは、最初にクラスメタデータを取得します。アップストリームパーサーが拒否する有効な単一リンクのクラスXMLには、公開リクエストアダプターが対応します。マップのエントリーはJSON内に保持されます。

結果が64KiBを超える場合、不透明な resultId、JSONページ、nextOffset、有効期限が返されます。readResultPage を使用してページを連結し、JSONとして解析すると、元のツール結果を復元できます。ページングによってSAPへのリクエストや書き込みが繰り返されることはありません。最大4件の4MiB結果が5分間保持されます。変更操作やセッションのリセットによって消去されます。有効期限が切れた結果を取得するには、元の読み取りを意図的に再実行する必要があります。さらに大きな結果は、明確なエラーになります。クエリ/検索/ATCのデフォルト件数は100で、利用可能な場合は上限が1000です。APIが追加の番兵行を返すことがあります。その他の大きな構造には、汎用ページングを使用します。

検証とデプロイ受け入れ確認

npm run build
npm test
npm run verify:stdio
npm run verify:package
npm audit
docker build -t mcp-abap-api .
node scripts/verify-stdio.mjs --offline docker run --rm -i --network none mcp-abap-api

テストでは、ローカルの実際のHTTP/XMLフィクスチャーと、インストール済みの最新およびレガシーのプロトコル交換を使用します。Linux/WindowsのNode22/24と、root以外のユーザーで実行するDockerがCIで動作します。SAP本番環境の認証情報や書き込みは使用しません。許可された読み取り専用のデプロイ検証では、SAP_LIVE_TEST=1 と任意の SAP_LIVE_SOURCE_URL を設定してから、npm run verify:live を実行してください。これはログイン、検出、任意のソース読み取りを確認するもので、すべてのSAP書き込み/デバッグ/Git/トランスポート機能を確認するものではありません。これらは開発システムで検証してください。権限、認証情報、APIの利用可否、および2026年末までのサポートは、デプロイ時に確認する必要があります。

既存のPR19/20/21/22は、重複操作のエラー、結果サイズ、クラスインクルード、ログインに関するもので、すべてオーナーによるレビュー待ちです。PR15の状態復元とリファクタリングされたJSON処理は、開始時点のブランチにすでに存在します。PR10で提案されたXSUAAの実装は、ここにはマージされていません。

参考資料:abap-adt-api、MCP2026-07-28、NodeのプライベートCA設定。

既存のツールワークフローの参考資料

以下に、従来のワークフローの例を示します。上記のランタイム、スキーマ、インストール動作に関する説明は、古いクライアント固有の例より優先されます。

カスタム指示

このカスタム指示を使って、モデルにツールの説明をしてください。

## mcp-abap-abap-adt-api Server

This server provides tools for interacting with an SAP system via ADT (ABAP Development Tools) APIs. It allows you to retrieve information about ABAP objects, modify source code, and manage transports.

**Key Tools and Usage:**

*   **`searchObject`:** Finds ABAP objects based on a query string (e.g., class name).
    *   `query`: (string, required) The search term.
    *   Returns the object's URI.  Example: `/sap/bc/adt/oo/classes/zcl_invoice_xml_gen_model`

*   **`transportInfo`:** Retrieves transport information for a given object.
    *   `objSourceUrl`: (string, required) The object's URI (obtained from `searchObject`).
    *   Returns transport details, including the transport request number (`TRKORR` or `transportInfo.LOCKS.HEADER.TRKORR` in the JSON response).

*   **`lock`:** Locks an ABAP object for editing.
    *   `objectUrl`: (string, required) The object's URI.
    *   Returns a `lockHandle`, which is required for subsequent modifications.

*   **`unLock`:** Unlocks a previously locked ABAP object.
    *   `objectUrl`: (string, required) The object's URI.
    *   `lockHandle`: (string, required) The lock handle obtained from the `lock` operation.

*   **`setObjectSource`:** Modifies the source code of an ABAP object.
    *   `objectSourceUrl`: (string, required) The object's URI *with the suffix `/source/main`*.  Example: `/sap/bc/adt/oo/classes/zcl_invoice_xml_gen_model/source/main`
    *   `lockHandle`: (string, required) The lock handle obtained from the `lock` operation.
    *   `source`: (string, required) The complete, modified ABAP source code.
    *   `transport`: (string, optional) The transport request number.

*   **`syntaxCheckCode`:** Performs a syntax check on a given ABAP source code.
    *   `code`: (string, required) The ABAP source code to check.
    *   `url`: (string, optional) The URL of the object.
    *   `mainUrl`: (string, optional) The main URL.
    *   `mainProgram`: (string, optional) The main program.
    *   `version`: (string, optional) The version.
    *   Returns syntax check results, including any errors.

*   **`activate`:** Activates an ABAP object. (See notes below on activation/unlocking.)
    *    `object`: The object to be activated.

*   **`getObjectSource`:** Retrieves the source code of an ABAP object.
    *   `objectSourceUrl`: (string, required) The object's URI *with the suffix `/source/main`*.

**Workflow for Modifying ABAP Code:**

1.  **Find the object URI:** Use `searchObject`.
2.  **Read the original source code:** Use `getObjectSource` (with the `/source/main` suffix).
3.  **Clone and Modify the source code locally:** (e.g., `write_to_file` for creating a local copy, and using `read_file`, `replace_in_file` for modifying this local copy).
4.  **Get transport information:** Use `transportInfo`.
5.  **Lock the object:** Use `lock`.
6.  **Set the modified source code:** Use `setObjectSource` (with the `/source/main` suffix).
7.  **Perform a syntax check:** Use `syntaxCheckCode`.
8.  **Activate** the object, Use `activate`..
9.  **unLock the object:** Use `unLock`.

**Important Notes:**
*   **File Handling:** SAP is completly de-coupled from the local file system. Reading source code will only return the code as tool result - it has no effect on file. Files are not synchronized with SAP but merely a local copy for our reference. FYI: It's not strictly necessary for you to create local copies of source codes, as they have no effect on SAP, but it helps us track changes.
*   **File Handling:** The local filenames you will use will not contain any paths, but only a filename! It's preferable to use a pattern like "[ObjectName].[ObjectType].abap". (e.g., SAPMV45A.prog.abap for a ABAP Program SAPMV45A, CL_IXML.clas.abap for a Class CL_IXML)
*   **URL Suffix:**  Remember to add `/source/main` to the object URI when using `setObjectSource` and `getObjectSource`.
*   **Transport Request:** Obtain the transport request number (e.g., from `transportInfo` or from the user) and include it in relevant operations.
*   **Lock Handle:**  The `lockHandle` obtained from the `lock` operation is crucial for `setObjectSource` and `unLock`. Ensure you are using a valid `lockHandle`. If a lock fails, you may need to re-acquire the lock. Locks can expire or be released by other users.
*   **Activation/Unlocking Order:** The exact order of `activate` and `unLock` operations might need clarification. Refer to the tool descriptions or ask the user. It appears `activate` can be used without unlocking first.
* **Error Handling:** The tools return JSON responses. Check for error messages within these responses.

## Efficient Database Access

SAP systems contain vast amounts of data.  It's crucial to write ABAP code that accesses the database efficiently to minimize performance impact and network traffic.  Avoid selecting entire tables or using broad `WHERE` clauses when you only need specific data.

*   **Use `WHERE` clauses:** Always use `WHERE` clauses in your `SELECT` statements to filter the data retrieved from the database.  Select only the specific rows you need.
*   **`UP TO 1 ROWS`:** If you only need a single record, use the `SELECT SINGLE` statement, if you can guarantee that you can provide ALL the key fields for the `SELECT SINGLE` statement. Otherwise, use the `SELECT` statement with the `UP TO 1 ROWS` addition. This tells the database to stop searching after finding the first matching record, improving performance. Example:

    ```abap
    SELECT vgbel FROM vbrp WHERE vbeln = @me->lv_vbeln INTO @DATA(lv_vgbel) UP TO 1 ROWS.
      EXIT. " Exit any loop after this.
    ENDSELECT.
    ```
## Checking Table and Structure Definitions

When working with ABAP objects, you may encounter errors related to unknown field names or incorrect table usage. Use the following tools to inspect DDIC (Data Dictionary) objects:

*   **`objectStructure`:** Retrieves the structure/metadata of an ABAP object (including DDIC tables and structures) from its object URI. Use `searchObject` first to resolve the object name to a URI.
*   **`ddicElement`:** Retrieves details of a DDIC element (e.g. a data element or domain).
*   **`ddicRepositoryAccess`:** Reads DDIC repository information for a given path.
*   **`tableContents`:** Retrieves the *contents* (rows) of a table, not its definition. Use `runQuery` for ad-hoc `SELECT`s.

トラブルシューティング

  • npxでパッケージが見つからない/クライアントが起動できない場合: Node.js がインストールされ、PATH に含まれていることを確認してください(node -v、npm -v)。Windows では"command": "npx.cmd"を試すか、node dist/index.jsの絶対パスを指定してソースからビルドしてください。
  • SAP 接続エラー: 認証情報(SAP_URL、SAP_USER、SAP_PASSWORD、SAP_CLIENT)を確認し、システムに接続できること、ユーザーに ADT の権限があること、SICFで/sap/bc/adtが有効になっていることを確認してください。
  • TLS/自己署名証明書のエラー: Node の起動前に、信頼できる CA 証明書への絶対パスをNODE_EXTRA_CA_CERTSに設定してください。検証は有効なままです。

貢献

貢献を歓迎します!貢献するには、以下の手順に従ってください。

  1. リポジトリをフォークする

  2. 新しいブランチを作成する

    git checkout -b feature/your-feature-name
    
  3. 変更をコミットする

    git commit -m "Add some feature"
    
  4. ブランチにプッシュする

    git push origin feature/your-feature-name
    
  5. プルリクエストを作成する

ライセンス

このプロジェクトはMIT ライセンスのもとでライセンスされています。

コメント

MCP は初めてですか?

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

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