ARC-1 について
ARC-1はADT REST APIを介してAIアシスタントをSAP ABAPシステムに接続するMCPサーバーです。制御されたAI支援SAP開発を行う組織向けに、設定可能なアクセス制限と複数の認証方式を備え、BTPまたはオンプレミスにデプロイできます。
主な機能
- 01SAPの読み取り・書き込み操作を制御
- 02意図ベースの12ツール
- 03複数の認証方式
- 04BTPとオンプレミスへのデプロイ
- 05SAPソースのキャッシュ
活用シーン
- 01SAP ABAPオブジェクトの確認と編集
- 02依存関係とオブジェクト利用状況の確認
- 03BTP経由でAIクライアントをSAPに接続
- 04パッケージや操作ごとにSAP書き込みを制限
MCP 対応
ARC-1は12個のツールを通じて、SAP ABAPの操作とコンテキストをMCPクライアントに公開します。APIキーやOAuthベースのフローなど、MCPクライアント向けの認証に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y arc-1SAP_URLSAP system URL (e.g., http://host:50000)SAP_USERSAP usernameSAP_PASSWORDシークレットSAP passwordSAP_CLIENTSAP client numberSAP_LANGUAGESAP logon languageSAP_INSECURESkip TLS certificate verificationSAP_ALLOW_WRITESAllow ABAP object mutations (safe default: false)SAP_TRANSPORTMCP transport (Docker defaults to http-streamable, set to stdio for local MCP clients)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
9掲載時のツール一覧 · 5 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| to | string | いいえ | action="diff" の NEW 側(デフォルトは "inactive" = 有効化待ちの変更)。from と同じ値を指定します。 |
| from | string | いいえ | action="diff" の OLD 側:"active"(デフォルト)、"inactive"、SAPRead(type="VERSIONS") のリビジョン ID、または /sap/bc/adt/ のリビジョン URI。 |
| grep | string | いいえ | オブジェクトのソース内を検索する正規表現パターン(大文字と小文字を区別しません)。完全なソースではなく、一致する行と1始まりの行番号、および前後3行のコンテキストのみを返し、トークンを節約します。CLAS では、一致箇所に所有するクラス/メソッドが注記されます。include= と組み合わせてセクションを絞り込めますが、method= とは組み合わせないでください(grep で検索してから method= で読み取ります)。ソースを持つ型(CLAS、INTF、DDLS、DCLS、BDEF、SRVD、SRVB、SKTD/KTD、DDLX、TABL、PROG、FUNC、FUGR、INCL、VIEW)で使用できます。パターンが有効な正規表現でない場合は、リテラル検索にフォールバックします。 |
| name | string | いいえ | オブジェクト名(例:ZTEST_PROGRAM、ZCL_ORDER、MARA) |
| type | enum | はい | オブジェクトまたはメタデータのタイプ。TABL には DDIC 構造が含まれます。KTD は SKTD(Knowledge Transfer Documents)のエイリアスです。SYNTAX は objectType+name を検証します。サーバー駆動型オブジェクトは、検出機構でゲートされた XML メタデータと AFF JSON ソースを使用します(DTSC/DSFD/DTDC/DRTY は DDL テキストを使用)。DESD 論理外部スキーマ;EVTB イベントバインディング;EVTO イベントオブジェクト;CSNM CSN モデル;COTA 通信ターゲット;DTSC 静的キャッシュ;DTDC 動的キャッシュ;DSFD スカラー関数;UIAD launchpad ディスクリプター;DRTY CDS タイプ;APLO ログオブジェクト;SAJC/SAJT ジョブカタログ/テンプレート。非推奨:MESSAGES→MSAG。FTG2→FEATURE_TOGGLE。ENQU ロックオブジェクトは JSON として返されます。PROG | CLAS | INTF | FUNC | FUGR | INCL | DDLS | DCLS | DDLX | BDEF | SRVD | SRVB | SKTD | KTD | TABL | VIEW | DOMA | DTEL | TRAN | TTYP | ENQU | TABLE_CONTENTS | TABLE_QUERY | DEVC | SOBJ | SYSTEM | COMPONENTS | MSAG | MESSAGES | TEXT_ELEMENTS | VARIANTS | BSP | BSP_DEPLOY | API_STATE | INACTIVE_OBJECTS | SYNTAX | AUTH | FEATURE_TOGGLE | FTG2 | ENHO | VERSIONS | VERSION_SOURCE | DESD | DTSC | CSNM | EVTB | EVTO | COTA | DSFD | DTDC | UIAD | DRTY | APLO | SAJC | SAJT |
| group | string | いいえ | FUNC、VERSIONS、または objectType=FUNC の API_STATE に使用する汎用モジュールの機能グループです。省略した場合、SAPSearch によって自動解決されます。 |
| where | array | いいえ | TABLE_QUERY の場合:構造化された WHERE 条件で、各条件は AND で結合されます。各項目:{field, op, value?}。演算子:=、<>、<、<=、>、>=、LIKE、NOT LIKE、IN、NOT IN、IS NULL、IS NOT NULL。758 では != が拒否されるため、<> を使用してください。IN/NOT IN の場合:値は引用符で囲まず、カンマ区切りで指定してください。引用符は付けないでください。ARC-1 は値を引用符で囲み、エスケープします(例:"261,262")。サブクエリは使用できません。例:[{"field":"MATNR","op":"=","value":"300006888"},{"field":"BUDAT_MKPF","op":">=","value":"20250101"}]。 |
| action | enum | いいえ | 2 つのソースバージョン間の統一 diff を生成するには "diff" を設定します(from/to を使用)。両方のソースを取得するより低コストです。ソースタイプのみ対応:PROG、CLAS、INTF、FUNC、FUGR、INCL、DDLS、DCLS、BDEF、SRVD、DDLX、TABL。diff |
| format | enum | いいえ | デフォルト:text。editable:保護付き SAPWrite 用の最新の {source, sourceHash}。version/method/grep を省略し、CLAS include を選択します。structured:CLAS メタデータ+includes、DEVC {objects,listing}、または action=diff の JSON。DEVC の text は配列の後に listing メタデータを返し、diff の text はパッチを返します。text | structured | editable |
| method | string | いいえ | CLAS の場合:メソッド(例:"get_name"、"zif_order~process"、"lhc_travel~accept")を読み取るか、"*" を指定してメソッドを一覧表示します。include= を指定しない場合、lhc_*/lcl_* は implementations、ltc_* は testclasses、その他は MAIN を使用します。include= を明示的に指定した場合はそちらが優先されます。SOBJ の場合:読み取る BOR メソッド名です。省略すると BOR メソッドカタログ全体を返します。他のタイプでは使用しません。 |
| source | string | いいえ | SYNTAX 専用:保存せずに検証するソースです。省略すると保存済みバージョンを検証します(デフォルトは active、inactive は draft を検証)。オブジェクトが存在している必要があります。version=auto はサポートされません。 |
| columns | array | いいえ | TABLE_QUERY 用:SELECT する列(デフォルト:すべて)。例:["MATNR","BWART","BUDAT","MENGE"]。 |
| include | string | いいえ | CLAS:include を省略するか、main を指定するとグローバル宣言+実装を対象にします。definitions/implementations はローカルヘルパークラス、macros/testclasses はそれぞれのセクションを選択します。明示的な include は method による自動ルーティングより優先されます。DDLS の場合:生の DDL ではなく、include="elements" を指定して CDS フィールドカタログ(キー項目、エイリアス、アソシエーション、式の型)を取得します。VERSIONS(CLAS)の場合:include で照会するクラス include の履歴(main、definitions、implementations、macros、testclasses)を選択します。BSP:大文字と小文字を区別するパスです。name には APP/path も指定できます。TEXT_ELEMENTS:symbols|selections|headings。省略すると pool を使用します(CLAS:symbols)。 |
| maxRows | number | いいえ | TABLE_CONTENTS/TABLE_QUERY の行数上限(デフォルト 100、最大 10,000。先にバイト数制限に達する場合があります)。758 では TABLE_CONTENTS は N+1 行を返します。正確な上限を指定するには TABLE_QUERY を使用してください。 |
| toLabel | string | いいえ | action="diff" で任意指定する表示ラベルです。サマリーとパッチヘッダーの新側に表示されます(例:"active"、"inactive draft")。ソースの解決には影響しません。 |
| version | enum | いいえ | ソースのデフォルトは active です。inactive は draft を要求します(draft がない場合、SAP は active を返すことがあります)。auto は developer view を選択します。DTEL/ENQU/サーバー駆動型タイプのデフォルトは developer view です。明示的に指定されたバージョンを SAP が確認できない場合(例:draft がない場合)、サーバー駆動型タイプはエラーを返します。active | inactive | auto |
| fromLabel | string | いいえ | action="diff" で任意指定する表示ラベルです。サマリーとパッチヘッダーの旧側に表示されます(例:"DNT-6-6: Validate discounts (DS7K900123)")。ソースの解決には影響しません。 |
| sqlFilter | string | いいえ | TABLE_CONTENTS 専用の条件式です(WHERE、SELECT は含めません)。758 では動作しません(SAP は SELECT を要求します)。TABLE_QUERY の where を使用してください。 |
| maxResults | number | いいえ | DEVC オブジェクト数の上限(デフォルト 200、[1, 1000] の範囲に制限)。Listing メタデータには有効な上限と切り捨ての可能性が記載されます。合計数とリポジトリ全体の完全性は不明のままです。 |
| objectType | string | いいえ | SYNTAX:必須のリポジトリタイプ(例:CLAS、PROG、DDLS)。API_STATE:省略時は推定されます。VERSIONS:type でエンドポイントを選択します。CL_/IF_/CX_ から推定し、それ以外は PROG になります。TEXT_ELEMENTS:PROG(デフォルト)、CLAS、または FUGR。 |
| versionUri | string | いいえ | VERSION_SOURCE:VERSIONS .revisions[].uri から取得した正規のソース/リビジョン URI です。無関係な ADT エンドポイント、絶対 URL、パストラバーサル、クエリ、フラグメントは拒否されます。 |
| force_refresh | boolean | いいえ | ソース読み取り用:読み取り前にキャッシュされたソースと inactive リストの状態をバイパスします。ARC-1 の外部でオブジェクトが変更されたと分かっている場合に使用します。 |
| expand_includes | boolean | いいえ | FUGR タイプ専用です。true の場合、関数グループの include ツリー(メインソースとすべてのネストされた INCLUDE)を再帰的に展開します。FUNCTION...ENDFUNCTION 本体はネストされた LZ<grp>U01/U02 include 内にあるため、1 階層だけの走査では見落とします。各ブロックの前に "=== name ===" マーカーが付きます。深さと件数には上限があります。Dynpro と GUI ステータスは含まれません(ADT は REST 経由で公開していません)。 |
| includeSignature | boolean | いいえ | FUNC タイプ専用です。true の場合、レスポンスは JSON になります:{source, signature: {importing[], exporting[], changing[], tables[], exceptions[], raising[]}, processingType?, updateTaskKind?}。各パラメーターは {kind, name, type, byValue?, default?, optional?} に解析されます。processingType は rfc/update/normal を示します。デフォルトは false(ソース本文のみを返します)。 |
詳細
ARC-1 — SAP ADT MCP サーバー
ARC-1(arc one [ɑːrk wʌn] と発音)— SAP ABAP システム向けのエンタープライズ対応 MCP サーバーです。デフォルトで安全性を確保し、BTP またはオンプレミスにデプロイでき、大規模なユニット/統合/E2E テストで堅牢性を高めています。
ARC-1 は、ADT REST API を介して、AI アシスタント(Claude、GitHub Copilot、Copilot Studio、およびあらゆる MCP クライアント)を SAP システムに接続します。npm パッケージおよびDocker イメージとして提供されています。
ドキュメント全文 | クイックスタート | ツールリファレンス | ARC-1 の最新情報 | ブログシリーズ
📬 ARC-1 の最新情報をチェック — メジャーリリース、アップグレードおよびセキュリティに関するお知らせ、実用的なガイドのほか、今後の展開に役立てるためのご意見を伺うこともあります。ARC-1 の最新情報を受け取る →
📖 新着:AI ABAP 開発ブログシリーズ — ABAP における AI、ARC-1 の設計、BTP/Copilot Studio/Joule の実践的な解説を扱う長文記事です。シリーズを読む →
ARC-1 が選ばれる理由
ガードレールを備えた AI 支援 SAP 開発を必要とする組織向けに構築されています。abap-adt-api、mcp-abap-adt、vibing-steampunk の先駆的な取り組みに着想を得て、ARC-1 は本番環境での運用に必要な機能を追加しています:
セキュリティと管理者向け制御
- デフォルトで安全 — 読み取り専用で、自由形式の SQL、テーブルプレビュー、トランスポートへの書き込み、Git への書き込みはできません。各機能を有効にするには、明示的な
SAP_ALLOW_*フラグが必要です - アクション拒否リスト —
SAP_DENY_ACTIONS(例:SAPWrite.delete)を使って特定のツールアクションをブロックできます。管理者に低レベルの操作コードを公開する必要はありません - パッケージ制限 — AI による書き込み操作(作成、更新、削除)を、ワイルドカードを使って特定のパッケージに制限できます(
--allowed-packages "Z*,$TMP")。読み取り操作はパッケージによって制限されません。読み取りレベルのアクセス制御には、SAP のネイティブな認可機能を使用してください - データアクセス制御(デフォルトで無効) — テーブルプレビュー、保存済み SAPscript テキスト、SLG1 メッセージを利用するには
SAP_ALLOW_DATA_PREVIEW=trueが必要です。自由形式の SQL には別途SAP_ALLOW_FREE_SQL=trueが必要です。有効にする用途については、SAP API ポリシー、SAP との契約、および社内のデータガバナンス規則に照らして確認してください。 - 実験的データソース向け緊急停止機能 — 承認済みのデータ/SQL デプロイでは、
SAP_BLOCKED_DATA_SOURCES=USR02,PA0002を設定できます。ARC-1 は各 SQL リクエストを解析し、実行前に有効な CDS と後継オブジェクトの系譜を解決して、名前の完全一致による直接的または間接的な一致を拒否します。系譜が未対応の場合や証明できない場合も、安全側に倒して処理を拒否します。デフォルトは空で、メタデータ呼び出しは追加されません。この拒否リストは多層防御の一部であり、本番環境向けの許可リストでも、SAP 認可/CDS DCL の代替でもありません。認可とロールを参照してください。 - トランスポートの安全性 — トランスポートの読み取りはレビューに利用できますが、トランスポートの変更には
--allow-writesと--allow-transport-writesの両方が必要です。トランスポートが明示されていない場合、更新/削除操作ではロックの修正番号が自動的に使用されます - Git ワークフローの安全性 — Git 操作はデフォルトで無効です。
--allow-git-writes/SAP_ALLOW_GIT_WRITES=trueで明示的に有効にしてください - API キープロファイル — 複数キーを使う HTTP デプロイでは、キーごとに
viewer、viewer-data、viewer-sql、developer、developer-data、developer-sql、またはadminを割り当てられます - 有効化時の書き込み先は
$TMPに制限 — ローカル/一時的なオブジェクトのみが対象です。トランスポート可能なパッケージへの書き込みには、明示的な--allowed-packagesが必要です - HTTP セキュリティヘッダー(helmet)はデフォルトで有効 — HSTS、CSP、X-Frame-Options、CORP、X-Content-Type-Options を設定します。ポップアップベースの OAuth フロー(Copilot Studio)が引き続き動作するよう、COOP は意図的に設定していません。無効にするフラグはありません
- ブラウザ MCP クライアント向けのオプトイン CORS —
ARC1_ALLOWED_ORIGINS(カンマ区切り、完全一致)で設定します。デフォルトでは無効です。ネイティブ MCP クライアントには不要です - 多層レート制限 — 標準で 3 層を備えています。IP ごとの OAuth 制限と MCP HTTP の共有エッジ制限(第 1 層。
ARC1_MCP_HTTP_RATE_LIMITで上書きしない限り、MCP は従来の算出上限を継承)、ユーザーごとの MCP クォータ(第 2 層、デフォルトで無効。複数ユーザーのデプロイではARC1_RATE_LIMIT=60でオプトイン)、サーバー全体の SAP 接続セマフォ(第 3 層、デフォルトは 10、有効)。SAP/BTP ゲートウェイからの 429/503 応答に含まれるRetry-Afterを尊重します。レート制限ガイドを参照してください - サプライチェーンセキュリティ — Dependabot(npm + GitHub Actions + Docker、週次および同日中のセキュリティアドバイザリ)、
npm audit --audit-level=highによる PR ゲート、すべての PR での GitHub Dependency Review、CodeQL SAST、Trivy コンテナスキャン(スケジュール実行のマルチアーキテクチャ HIGH/CRITICAL ゲートに加え、アドバイザリに基づくリリース/開発スキャン)、すべてのサードパーティ製 GitHub Actions のコミット SHA 固定、深刻度別の SLA を定めたSECURITY.mdポリシーを採用しています。イメージと npm パッケージの両方にプロベナンス証明が付属し、リリースワークフローでは、本番環境の npm 依存関係グラフを対象とした CycloneDX SBOM をベストエフォートで公開します。セキュリティガイド §13を参照してください
認証
- API key — 内部デプロイ向けのシンプルな Bearer トークン
- OIDC / JWT — Entra ID、Keycloak、または任意の OpenID Connect プロバイダー
- OAuth 2.0 — BTP ABAP Environment のサービスキー開発向けの、ブラウザーを使用したローカルログイン
- XSUAA — MCP クライアント向けの自動トークンプロキシ機能を備えた、SAP BTP ネイティブの認証
- ユーザーごとの SAP ID — BTP Destination Service が MCP ユーザーを SAP に転送します。オンプレミス SAP では Cloud Connector のプリンシパル伝播を、BTP ABAP Environment では
OAuth2UserTokenExchangeを使用します
BTP Cloud Foundry へのデプロイ
プラットフォームとの完全な統合により、ARC-1 を SAP BTP 上の Cloud Foundry アプリとしてデプロイできます。
- Destination Service — 管理対象の Destination を介して SAP システムに接続します
- 実験的なマルチターゲットモード — デフォルトでは無効の BTP モードです。
arc1.enabled=trueが設定された Destination を検出し、SID とクライアントを固定したエンドポイント、および読み取り専用の集約エンドポイントを公開します。 スコープ付きの固定 PP 書き込みには、個別の Destination/IAM オプトインが必要です (セットアップ、 管理) - オプションのターゲットフィルタリング — チームごとに異なるターゲットリストが必要な、共有マルチシステムゲートウェイ向けです。XSUAA ロールを通じてシステム/クライアントを割り当てます。 IAS の変更は任意です。これは IAM で割り当てられたターゲットをフィルタリングするもので、自動検出された SAP アカウントは対象ではありません。
- Cloud Connector — Connectivity プロキシを介してオンプレミスシステムに接続します
- ユーザーごとの Destination — ユーザー ID をエンドツーエンドで転送します。オンプレミス SAP では X.509 証明書を使用し、BTP ABAP Environment では ABAP ベアラートークンに交換します
- XSUAA OAuth プロキシ — MCP クライアントは標準 OAuth で認証し、ARC-1 が BTP トークン交換を処理します
- 監査ログ — stderr、ファイル、または BTP Audit Log Service に構造化イベントを出力します
トークン効率
- 200 個以上の個別ツールではなく、12 個のインテントベースのツール — ツール選択をシンプルに保ちます。スキーマペイロードは CI の予算で管理され、コンテキストウィンドウが限られている場合に適した、焦点を絞った 1 ツールモードも備えています
- メソッド単位の読み取り/編集 — ソース全体ではなく、単一のクラスメソッドを読み取るか更新します(トークンを最大 20 分の 1 に削減)
- 焦点を絞ったソースと依存関係のコンテキスト — 正確な実装の動作を確認するには、対象を絞った
SAPReadを使用します。ビジネス上の目的、レビュー、テスト設計については、まずSAPContext(action="deps", type=..., name=...)を実行し、利用可能な Knowledge Transfer Documents(SKTD/KTD)と依存関係のコントラクトを確認してから、要件とソースを比較します。文書化された要件がない場合、意図は検証されていません。
組み込みのオブジェクトキャッシュ
- サーバー検証済みのソースキャッシュ — SAP オブジェクトを読み取るたびに、メモリ(stdio)または SQLite(http-streamable)にキャッシュされます。読み取りを繰り返す際は
If-None-Match/ETag による条件付き GET を使用するため、変更されていないオブジェクトは SAP が304 Not Modifiedを確認した後にキャッシュから返されます。 - 依存関係解析の再利用 — 変更されておらず、認可済みのソースについては、メモリ内の解析済み依存関係とコントラクトを再利用できます。集約された依存関係グラフはキャッシュされません。SAP の認可とソース検証は引き続き適用されます。
- KTD を考慮したコンテキスト — Knowledge Transfer Documents はソースキャッシュを使用し、
SAPContext(action="deps")に組み込まれる際に再検証されます。 - 最新の where-used 情報 —
SAPContext(action="usages")と CDS 影響分析は、呼び出し元の ID を使用して SAP の最新のリポジトリインデックスを照会します。起動時のリポジトリスキャンは不要です。 - 有効/無効なソースビュー —
SAPReadはversion="active" | "inactive" | "auto"を受け付け、有効なソースに未アクティブ化のドラフトがある場合は警告します。 - 書き込み時の無効化 —
SAPWriteまたはSAPActivateがオブジェクトを変更すると、有効/無効の両方のソースキャッシュエントリが破棄されます。次回の読み取り時に再検証するか、新しいソースを取得します。
詳細については、docs/caching.md をご覧ください。
テスト
- 3,474 件のユニットテスト(ユニットテストファイル
104件、HTTP をモック) - ライブ SAP システムに対するデフォルトの統合テストプロファイル 262 件。認証情報またはフィクスチャが不足している場合は、明確なスキップ理由が示されます
- 実行中の ARC-1 サーバーとライブ SAP システムに対して、実際の MCP ツール呼び出しを実行するデフォルトの E2E テストプロファイル 141 件
- 手動実行の低速 SAP プロファイルでは、幅広い where-used、RAP フルスタック、再帰的な CTS リリースのテストを PR の実行対象外にしています(
test:integration:slow、test:e2e:slow、GitHub SAP Slow Tests ワークフロー) - CRUD ライフサイクルおよび BTP スモークテストレーンを含みます(
test:integration:crud、test:integration:btp:smoke) - Node
22および24の CI マトリックス。ライブ SAP の統合テストと E2E テストは内部 PR および手動実行時に実行され、ドキュメント/雑務の PR および外部フォークでは SAP ジョブが実行対象外になります - 信頼性テレメトリとカバレッジを、参考情報として CI シグナルに公開します(ブロッキングなし)
実環境での使用に合わせて洗練されたツール
12 個のツールは、LLM との実際のやり取りから得られたフィードバックを基に設計されています。
| ツール | 機能 |
|---|---|
| SAPRead | ABAP ソース、メソッド本体、grep の一致箇所、テーブルデータ、CDS ビュー、アクセス制御(DCLS)、メタデータ拡張(DDLX)、サービスバインディング(SRVB)、ナレッジトランスファー文書(SKTD または親しみやすい別名 KTD)、メッセージクラス(MSAG)、リビジョン履歴(VERSIONS/VERSION_SOURCE)、非アクティブなオブジェクトの状態、BOR オブジェクト、デプロイ済み UI5/Fiori アプリ(BSP、BSP_DEPLOY)、および ABAP Platform 2025 のサーバー駆動型オブジェクト(DESD、EVTB、EVTO、DTSC、CSNM、COTA)を読み取ります。「このオブジェクトは何をするのか」を確認する場合は、まず SAPContext を使用し、正確なソースの確認には SAPRead を使用してください。拡張実装(ENHO)はオンプレミスと BTP の両方で読み取り可能です。権限フィールド(AUTH)と機能トグル(FEATURE_TOGGLE)はオンプレミスのみで利用できます。クラスの構造化形式では、メタデータと分解されたインクルードを JSON で返します。任意の grep 正規表現を指定すると、一致するソース行のみを返します(コンテキスト付き。クラスの場合はメソッド名も注記されるため、トークン効率の高い検索が可能です)。(非推奨の別名 MESSAGES/FTG2 は、マイナーバージョン 1 回分のみ受け付けます。) |
| SAPSearch | システム全体を対象としたオブジェクト検索とソースコード全文検索 |
| SAPWrite | 自動的なロック/ロック解除により、ABAP ソースと DDIC メタデータを作成/更新/削除します(PROG、CLAS、INTF、FUNC、FUGR、INCL、DDLS、DCLS、DDLX、BDEF、SRVD、SRVB、SKTD/KTD、TABL、DOMA、DTEL、MSAG。利用可能な型は BTP に応じて調整されます)。クラスの更新ではローカルインクルード(definitions、implementations、macros、testclasses)を対象にできます。クラスセクションの編集(edit_class_definition、add_method、edit_method_signature、delete_method、change_method_visibility)を使うと、LLM は /source/main を再送信せずにグローバルクラスのシグネチャを編集できます。RAP 動作プールのスキャフォールディングでは、シグネチャ/スタブの挿入前に lhc_* のスケルトンを自動作成できます。バッチ作成では、相互依存する複数オブジェクトのワークフロー(例:RAP スタック、または 1 回の呼び出しでのドメインとデータ要素)向けに、最後にまとめて有効化できます。 |
| SAPActivate | ABAP オブジェクトを有効化します。単一またはバッチ(RAP スタックでは必須)に対応し、S/4HANA の ED064 バッチ特有の問題に対するガード付き再試行も行います。OData サービスバインディング(SRVB)の公開/非公開にも対応します。 |
| SAPNavigate | 定義へ移動、参照の検索、コード補完 |
| SAPQuery | 保存済み SAPscript の長文テキストの読み取り、または ABAP SQL の実行。各操作には個別のオプトインが必要です。 |
| SAPTransport | CTS トランスポート管理(一覧表示/取得/作成/リリース/削除/再割り当て/再帰的リリース)、トランスポートレイヤー/ターゲットの検索、パッケージのトランスポート要件チェック、逆引き履歴(action="history") |
| SAPGit | gCTS と abapGit にまたがる Git ベースの ABAP ワークフロー(一覧表示/クローン/プル/プッシュ/コミット/ブランチ/リンク解除)。バックエンドの自動選択と安全性の確認(--allow-git-writes)に対応します。 |
| SAPContext | 依存関係 API(action="deps"):任意の KTD に加え、範囲を限定したソース由来のコントラクトを提供します。完全な関係一覧ではありません。また、ライブの使用箇所検索(action="usages")、CDS の影響分析(action="impact")、TABL のインクルード/アペンド(action="structure")にも対応します。 |
| SAPLint | ローカル ABAP リント(システム/リリースに対応したプリセット、自動修正、書き込み前の検証)と ADT PrettyPrint(サーバー側のフォーマット) |
| SAPDiagnose | 構文チェック、ABAP Unit テスト、ATC コード品質チェック、CDS テストケースの提案、アクティブ/非アクティブなオブジェクト状態の比較、汎用 ADT クイックフィックスの提案/適用差分、ゲートウェイ/システムメッセージの診断、ショートダンプ、プロファイラートレース、オンプレミスの権限トレース(SUAUTHVALTRC。データプレビューが有効な場合) |
| SAPManage | 機能のプローブ、キャッシュ統計、パッケージのライフサイクル/変更パッケージ操作、FLP カタログ/グループ/タイルのヘルパー |
ツール定義は対象システム(BTP とオンプレミス)に合わせて自動的に調整され、利用できない型が除外されるとともに、説明も更新されます。これにより、LLM がサポートされていない操作を試みることはありません。
機能の検出
ARC-1 は起動時に SAP システムを調査し、動作を適応させます。
- HANA、gCTS、abapGit、RAP/CDS、AMDP、UI5、およびトランスポートの利用可否を検出します
- BTP とオンプレミスのシステムを自動検出します
- SAP_BASIS リリースを適切な ABAP 言語バージョンに対応付けます
- 各機能は、オン/オフを強制するか、自動検出のままにできます
- 認証情報共有モード(技術ユーザー)では、起動時に認証の事前確認を一度実行し、401/403 が発生した場合は明確なエラーを表示して SAP ツールの呼び出しをブロックします。これにより、認証の失敗が繰り返されることや、ユーザーがロックアウトされる可能性を防ぎます
ADT API のステータスと方針
ARC-1 のようなカスタム MCP サーバーでは、SAP の サードパーティ MCP アクセスのリファレンスアーキテクチャ を、推奨する主要な設計および統制の基準としています。共有サービスでは、BTP Cloud Foundry、XSUAA、および厳格なプリンシパル伝播から始めてください。SAP の API ポリシーに関する FAQ の Q56 では、条件付きでカスタム MCP サーバーが許可されており、Q32 では Integration Suite が必須ではないことが確認されています。
SAP API ポリシーとアーキテクチャの整合性 では、 その経緯、ARC-1 がすでにサポートしている統制、および残るギャップについて説明しています。FAQ Q33 では ADT API を内部向けに分類し、推奨された開発チャネルでの利用に限定しています。ARC-1 の直接的な TypeScript ADT クライアントがその一つとして明示されているわけではありません。導入前に、開発/テスト環境も含め、SAP にそのチャネルと AI 支援による開発という意図を確認してください。BTP でのホスティングとセキュリティ統制だけでは、ポリシーへの完全な準拠は確立されません。ユーザーごとの SAP ID は PP に適用されますが、共有 Basic モードでは SAP ID が共有されます。
ARC-1 の 2 つの機能では、ビジネスデータを公開したり、アドホック SQL を実行したりできます。どちらもデフォルトではオフで、明示的なオプトイン用の環境変数が必要なため、利用可能になる前にオペレーターが意図的に判断できます。
| 機能 | 環境変数 | デフォルト | ポリシーに関する注記 |
|---|---|---|---|
テーブルのプレビュー(SAPRead(type=TABLE_CONTENTS/TABLE_QUERY))、保存済み SAPscript テキスト、SLG1 メッセージ(SAPQuery アクション long_text / application_log) | SAP_ALLOW_DATA_PREVIEW=true | false(オフ) | アプリケーションデータを読み取ります。認証済みの呼び出し元には data スコープも必要です。 |
任意の ABAP SQL(SAPQuery(action=sql)) | SAP_ALLOW_FREE_SQL=true | false(オフ) | アドホック ABAP SQL を実行します。認証済みの呼び出し元には sql スコープも必要です。 |
| 完全一致のソースブロックリスト(実験的) | SAP_BLOCKED_DATA_SOURCES=USR02,PA0002 | 空(オフ) | テーブルまたは CDS の直接/推移的な依存関係を完全一致で拒否します。有効時は意図的にフェイルクローズとなり、処理が遅くなります。 |
いずれかの機能を有効にした場合、データプレビューの成功時の本文は、ツール呼び出しごとの累積上限(デフォルトでは 2 MiB)までに制限されます。また、プロセスごとに 2 件までのデータ結果呼び出しのみが、解析とシリアル化の処理対象として許可されます。SAPQuery.maxRows は別途 10,000 に制限されますが、行の幅によっては、これよりかなり早くバイト数の上限に達する場合があります。ARC1_MAX_DATAPREVIEW_RESPONSE_BYTES または ARC1_MAX_CONCURRENT_DATA_RESULTS を調整する前に、設定を参照してください。
両方のフラグがデフォルト値のままの場合、ARC-1 のデータ/SQL 行には到達できません。FAQ Q33 では、アプリケーションテーブルの読み取り、ビジネスデータのエクスポート、バックエンド SQL を、ADT の想定する開発ツールの適用範囲から除外しています。該当する契約に基づく具体的な用途の許可、または SAP の承認が文書化されていない限り、これらのフラグはオフのままにしてください。社内承認や技術的なオプトインだけでは不十分です。ビジネスデータの統合には、公開されているビジネス API を使用してください。
ARC-1 は、機能の検出と慎重なデフォルト設定、集中型の認可を組み合わせています。検出によって確認できるのは技術的な利用可否であり、API ポリシー上の許可ではありません。リファレンスアーキテクチャに従い、API 固有の許可と導入済みの統制の両方を確認してください。
バージョン管理と安定性
1.0 以降、ARC-1 はセマンティックバージョニングに従います。パッチリリースではバグを修正し、マイナーリリースでは後方互換性のある機能を追加します。MCP ツールのインターフェイス、設定、または認証契約に対する破壊的変更がある場合は、メジャーバージョンを上げます。
実験的な機能は、デフォルトで無効になっているため、正式に採用されるまでこの保証の対象外です。これらの機能には明確なラベルが付けられており、マイナーリリースでインターフェイスが変更される場合があります。現在、これにはmulti-target BTP mode(ADR-0006 / ADR-0007)とdata-source blocklistが該当します。
リリースごとの変更内容:Release Notesの注釈付きリリースノートでは、各リリースの影響とアップグレード時の対応を確認できます。CHANGELOG.mdには、マージされたすべての PR が記載されています。
クイックスタート
エージェントプラグインとしてインストール — GitHub Copilot、VS Code、Cursor、Codex、その他の互換クライアントで、MCP サーバーと同梱のすべての SAP スキルを一度にインストールできます。
copilot plugin marketplace add arc-mcp/arc-1
copilot plugin install arc-1@arc-1
Agent Plugins 1.0 ではシークレットの入力プロンプトが定義されていないため、SAP に接続する前に、インストールしたプラグインの永続データディレクトリに ARC-1 の .env を作成してください。クライアントごとのインストール方法、安全な設定、検証については、**Agent Plugin ガイド**を参照してください。
Claude にインストール — 使用する環境を選択してください(詳しくはClaude へのインストールを参照してください)。
-
Claude Desktop — Releasesから最新の
arc-1-*.mcpbをダウンロードし、ダブルクリックします(または「Settings → Extensions」を選択します)。Claude が SAP 接続の入力を求めます(.mcpbはリリースに自動で添付されます。最新のリリースにまだ含まれていない場合は、Claude へのインストールを参照してください)。 -
Claude Code — MCP サーバーとすべてのSAP スキルを一度にインストールできます。
/plugin marketplace add arc-mcp/arc-1 /plugin install arc-1@arc-1 -
任意の MCP クライアント/手動 — 直接実行します。
npx arc-1@latest --url https://your-sap-host:44300 --user YOUR_USER -
ノート PC で試してみたい場合 → クイックスタート
-
Docker、Cookie 抽出ツール、クライアント設定を含むローカル開発環境を構築する場合 → ローカル開発
-
チーム向けまたは BTP にデプロイする場合 → デプロイ
ブログシリーズ — AI による ABAP 開発
blog.zeis.deで公開している長編シリーズです。ABAP 開発における AI、ARC-1 の設計、実際の活用例を紹介しています。
- 開発に AI を活用する方法とコンテキストが重要な理由
- ABAP とエージェント型 AI:実プロジェクトに潜む問題
- ARC-1 の紹介:エンタープライズ SAP 開発向けのセキュアな ADT MCP サーバー
- SAP BTP 上の ARC-1:ノート PC の枠を超えたセキュアな ABAP エージェント型開発
- Copilot Studio での ARC-1:開発者以外にも SAP システムのコンテキストを提供
- Joule Studio での ARC-1:実際の ABAP システムのコンテキストを Joule に提供
- ARC-1 で SEGW とレガシー UI5 から RAP へ
全記事と新着記事 → blog.zeis.de/tags/ai-abap-development-series。
ドキュメント
ドキュメントの全容は docs.arc-1-mcp.com でご覧いただけます。
| ガイド | 説明 |
|---|---|
| クイックスタート | 5 分で完了する npx + Claude Desktop のセットアップ |
| エージェントプラグイン | Copilot、VS Code、Cursor、Codex、および互換クライアント向けの、ポータブルなサーバーとすべてのスキル |
| Claude へのインストール | デスクトップ版 .mcpb、Claude Code プラグイン(サーバー + スキル)、リモート BTP コネクター |
| ローカル開発 | ローカル開発の全容 — すべてのインストール方法、MCP クライアント設定、SSO Cookie 抽出ツール |
| デプロイ | マルチユーザーデプロイ — Docker、BTP Cloud Foundry、BTP ABAP |
| SAP BTP:まずはこちら | BTP トポロジーを選択し、適切なデプロイ、認証、宛先、運用ガイドに従います |
| BTP Cloud Foundry | MTA デプロイ、トポロジーの決定、役割の引き継ぎ、安全な受け入れ |
| BTP 管理 | 変更、役割、シークレット、スケーリング、アップグレード、ロールバック、顧客への引き継ぎ |
| マルチシステムセットアップ | BTP マルチターゲットデプロイ、宛先、役割、スコープを指定した固定 PP 書き込み |
| 設定 | すべてのフラグと環境変数を 1 つの表に掲載 |
| 更新 | インストール方法ごとの更新手順 |
| エンタープライズ認証 | Layer A / Layer B 認証の内部構造、共存マトリックス |
| ツールリファレンス | 12 個すべてのツールに関する完全なリファレンス |
| 拡張機能(カスタムツール) | フォークせずに独自の Custom_* ツールを追加(FEAT-61)— 読み取り、ゲート付きの非 ADT 書き込み、クラス/レポートの実行 |
| アーキテクチャ | 図解付きのシステムアーキテクチャ |
| AI 利用パターン | エージェントのワークフローパターンとベストプラクティス |
| スキル | 再利用可能な ARC-1 エージェントスキル。Eclipse と VS Code ADT の GitHub Copilot セットアップを含みます |
| ブログシリーズ | ABAP 開発における AI、ARC-1 の内部構造、実際の手順紹介に関する長文記事 |
開発
npm ci && npm run build && npm test
コードベースの構成、テストコマンド、貢献ガイドラインについては、CLAUDE.md をご覧ください。
クレジット
| プロジェクト | 作者 | 貢献 |
|---|---|---|
| vibing-steampunk | oisee | Go 製のオリジナル MCP サーバー — ARC-1 の出発点 |
| abap-adt-api | Marcello Urbani | TypeScript ADT ライブラリ、決定版 API リファレンス |
| mcp-abap-adt | Mario Andreschak | ABAP ADT 向けの最初の MCP サーバー |
| abaplint | Lars Hvam | ABAP パーサー/リンター(@abaplint/core 経由で使用) |
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。