概要
S/4HANA オンプレミスや Private Cloud の業務データに Claude が HANA から直接回答。SAP のデータディクショナリをツール化。読み取り専用、セルフホスト、BTP 不要。
こう聞いてみよう
SAP S/4HANA (HANA SQL) のサンプルプロンプト
プロンプトをクリックでコピー。Claude / ChatGPT / Cursor / Gemini / Copilot / OpenClaw に貼り付けて、このコネクターで実行できます。
Claude は AI のため誤ることがあります。回答をご確認ください。
要点: SAP S/4HANA (HANA SQL) コネクタを使うと、Claude は S/4HANA システムを HANA データベースから直接読み取れます。クエリを書く前に、Claude は BUKRS、HSL、VBRK の意味を SAP 自身のデータディクショナリで調べるため、正しいテーブル、正しい通貨項目、正しいクライアントを選べます。セッションは HANA 側で読み取り専用に設定され、結果は最大 1,000 行で、すべてのステートメントにタイムアウトがあります。必要なのは、SAP Basis が用意する HANA データベースユーザーと、HANA の SQL ポートに到達できるセルフホストの AnythingMCP です。
| 概要 | |
|---|---|
| コネクタ | SAP S/4HANA (HANA SQL)、10 ツール |
| 対象システム | S/4HANA オンプレミス、Private Cloud(RISE)、HANA Enterprise Cloud |
| アクセス | 読み取り専用:1 回の呼び出しにつき SELECT 1 文、SET TRANSACTION READ ONLY、上限 1,000 行、タイムアウト 60 秒 |
| ドライバ | hdb を同梱。SAP の @sap/hana-client はオプションで、ユーザー自身がインストール |
| ホスティング | HANA に到達できるネットワーク内でセルフホスト(AnythingMCP はオープンソース、AGPL-3.0) |
| テスト | 全ツールを稼働中の SAP S/4HANA 2025 システムで実行済み |
- sap_* ツール 10 個
- ロールとツール権限
- 既定で読み取り専用
- 監査ログ
汎用の SQL コネクタでは SAP に不十分な理由
SAP のテーブルと項目は、ドイツ語の短い略語です。ACDOCA はユニバーサルジャーナル、RBUKRS は会社コード、HSL は会社コード通貨の金額、VBRK は請求伝票ヘッダです。列名しか見えないモデルは推測に頼りますが、SAP では推測が通用しません。金額は別の列にある通貨項目とセットで意味を持ち、すべてのテーブルはクライアント(MANDT)ごとに分かれ、日付は YYYYMMDD 形式の文字列で、伝票番号には先行ゼロが付きます。
このコネクタは、SAP 自身のディクショナリをツールとして Claude に提供します。SAP が自らを記述するためのテーブル(DD02L、DD03L、DD04T、DD07T、DD08L と CDS アノテーション)を読み取るため、Claude は各項目の業務上の名称、各金額に対応する通貨項目や数量単位項目、項目のコード値の意味、テーブルの結合方法、そして SAP の CDS ビューのうちどれがリリース済みで分析用かを把握できます。そのうえで初めてクエリを書きます。
Claude がデータを見つける手順
sap_guideは SQL の観点から SAP のデータモデルを説明します。クライアント、YYYYMMDD形式の日付、通貨、ユニバーサルジャーナルなどです。コストはかからず、データにも触れません。sap_org_structureは、会社コード(通貨と会計年度バリアント付き)、プラント、販売組織を一覧表示します。ほとんどの質問は、このいずれかで範囲が絞られます。sap_search_cds_viewsとsap_search_tablesはデータの所在を探します。結合、通貨、符号の処理が済んでいる、SAP のリリース済み分析用 CDS ビューを優先します。sap_describe_tableは、各項目の業務上の名称、各金額の通貨項目または数量単位項目、各コードのチェックテーブルを返します。sap_queryは読み取り専用のSELECTを 1 文実行します。クライアント、組織、期間で絞り込み、SQL で集計します。
質問できること
3 つの質問を最初から最後まで見ていきます。SQL は sap_guide のレシピに基づいています。クライアント 100、会社コード 1010、日付は自社の値に置き換えてください。Claude は、どの勘定を売上高とみなしたかなど、置いた前提を明示し、確認を求めます。
“2025 年の転記期間ごとの売上高は?”
HANA SQLsap_guidesap_org_structuresap_queryACDOCAユニバーサルジャーナル、主要元帳 0L
SELECT POPER, RHCUR AS CURRENCY, -SUM(HSL) AS REVENUE
FROM ACDOCA
WHERE RCLNT = '100' AND RLDNR = '0L' AND RBUKRS = '1010' AND GJAHR = '2025'
AND RACCT BETWEEN '0040000000' AND '0049999999' -- 売上高勘定:範囲を確認してください
GROUP BY POPER, RHCUR ORDER BY POPER;
転記期間ごとに 1 行、会社コード通貨で返します。売上高は貸方に転記されるため、合計の符号を反転しています。
“支払期日を 60 日以上過ぎた請求書がある得意先はどこで、金額はいくらですか?”
HANA SQLsap_guidesap_org_structuresap_queryACDOCAユニバーサルジャーナル、得意先明細(KOART = D)
SELECT KUNNR, RHCUR AS CURRENCY,
SUM(HSL) AS OPEN_AMOUNT,
SUM(CASE WHEN NETDT >= '20251231' THEN HSL ELSE 0 END) AS NOT_DUE,
SUM(CASE WHEN NETDT < '20251231' AND NETDT >= '20251101' THEN HSL ELSE 0 END) AS OVERDUE_1_60,
SUM(CASE WHEN NETDT < '20251101' THEN HSL ELSE 0 END) AS OVERDUE_OVER_60
FROM ACDOCA
WHERE RCLNT = '100' AND RLDNR = '0L' AND RBUKRS = '1010' AND KOART = 'D' AND POPER <> '000'
AND BUDAT <= '20251231' AND (AUGDT = '00000000' OR AUGDT > '20251231')
GROUP BY KUNNR, RHCUR ORDER BY OVERDUE_OVER_60 DESC LIMIT 20;
基準日時点の未決済明細を、正味支払期日で年齢分析します。基準日より後に消込された明細は、基準日時点では未決済として数えます。
“2025 年の純売上高上位 10 社の得意先は?”
HANA SQLsap_guidesap_field_valuessap_queryVBRK請求伝票ヘッダVBRP請求伝票明細KNA1得意先マスタ
SELECT k.KUNAG, c.NAME1, k.WAERK, SUM(p.NETWR) AS NET_SALES
FROM VBRK k JOIN VBRP p ON p.MANDT = k.MANDT AND p.VBELN = k.VBELN
LEFT JOIN KNA1 c ON c.MANDT = k.MANDT AND c.KUNNR = k.KUNAG
WHERE k.MANDT = '100' AND k.FKDAT BETWEEN '20250101' AND '20251231'
AND k.FKSTO = '' AND k.VBTYP = 'M'
GROUP BY k.KUNAG, c.NAME1, k.WAERK ORDER BY NET_SALES DESC LIMIT 10;
得意先番号、名称、通貨、純売上高を含む 10 行を返します。順位は仕訳ではなく請求伝票から求めます。ACDOCA では、得意先は売掛金の明細に記録され、売上高の明細には記録されないためです。Claude はまず VBTYP の値を読み、請求書とクレジットメモ、取消を区別します。
HANA SQL と OData のどちらを使うか
AnythingMCP は 2 つの方法で S/4HANA オンプレミスと Private Cloud に接続します。どちらか一方を選ぶことも、両方を並行して使うこともできます。
| HANA SQL(本ガイド) | OData | |
|---|---|---|
| 読み取り対象 | データベースユーザーが読める任意のテーブルまたは CDS ビュー | SAP ユーザーが呼び出せる OData サービス |
| SAP の権限 | 適用されない:データベースの権限付与が境界になる | 呼び出しのたびに SAP がチェック |
| 得意なこと | 数百万行にわたる集計、財務分析、モジュール横断の分析 | 公開 API、ビジネスオブジェクトのビュー、SAP 自身のチェック |
| 必要なもの | HANA データベースユーザー、SQL ポートへのネットワークアクセス、それを認めるライセンス | SAP の技術ユーザー、有効化された Gateway サービス |
必要なもの
- SAP Basis 管理者:ABAP スキーマ(通常は
SAPHANADBまたはSAPABAP1)を持つテナントデータベースに、ユーザーを作成できる人。 - 接続情報:ホスト、テナントの SQL ポート(最初のテナントは
3<instance>15、以降のテナントは3<instance>41以上)、テナント名、スキーマ、3 桁の SAP クライアント、テキスト用の SAP 言語(E英語、Dドイツ語)。 - セルフホストの AnythingMCP:そのポートに到達できること。HANA の SQL ポートは通常、社内ネットワークまたは SAP のプライベートクラウドのランディングゾーン内からしかアクセスできません。
- ライセンスの確認:サードパーティのアプリケーションから ABAP スキーマへ直接 SQL アクセスできるかどうかは、SAP HANA のライセンスによって決まります。S/4HANA に付属するランタイムライセンスでは通常認められず、フルユースライセンスなら認められます。本番システムを接続する前に、SAP の担当営業チームに確認してください。SAP のプライベートクラウドのサービスでは、データベースユーザーとネットワーク経路を SAP に申請します。
セットアップ
ステップ 1:読み取り専用のデータベースユーザーを作成する
ABAP スキーマを持つテナントで次を実行します:
CREATE USER AMCP_READER PASSWORD "<strong password>" NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER AMCP_READER DISABLE PASSWORD LIFETIME;
-- ディクショナリ用ツール
GRANT SELECT ON SAPHANADB.DD02L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD02T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03ND TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD04T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD07T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD08L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD05S TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DDHEADANNO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DDFIELDANNO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.ARS_W_API_STATE TO AMCP_READER;
-- 組織構造
GRANT SELECT ON SAPHANADB.T001 TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T001K TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T001W TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TKA01 TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TVKO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TVKOT TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T024E TO AMCP_READER;
-- 続いて、用途に必要な業務テーブルと CDS ビュー(例)
GRANT SELECT ON SAPHANADB.ACDOCA TO AMCP_READER;
幅広い分析には GRANT SELECT ON SCHEMA SAPHANADB のほうが簡単ですが、その場合は人事データを含め、スキーマ内のすべてが読み取り可能になります。SQL では SAP のアプリケーション権限(会社コード、販売組織、人事のチェック)は適用されません。データベースユーザーが読めるものは、Claude も読めます。
必要に応じて、このユーザーのステートメントをサーバー側でも制限できます:
CREATE WORKLOAD CLASS "AMCP_READER_WC" SET 'STATEMENT TIMEOUT' = '60', 'STATEMENT MEMORY LIMIT' = '20';
CREATE WORKLOAD MAPPING "AMCP_READER_WM" WORKLOAD CLASS "AMCP_READER_WC" SET 'USER NAME' = 'AMCP_READER';
ステップ 2:ネットワーク内で AnythingMCP を動かす
HANA の SQL ポートに到達できるホストで次を実行します:
mkdir anythingmcp && cd anythingmcp
curl -fsSLo docker-compose.yml \
https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d # → http://localhost:3000
.env の SSRF_ALLOWED_HOSTS に HANA ホストを追加してください。AnythingMCP は既定でプライベートアドレスへの接続を拒否します。
ステップ 3:コネクタをインストールする
Connectors → Marketplace を開き、S/4HANA で検索して SAP S/4HANA (HANA SQL) をインストールします:

続いて変数を入力します。接続先アドレスを構成する変数は、コネクタを作成する前に入力が必須です:
| 変数 | 例 |
|---|---|
SAP_HANA_HOST | hana.internal |
SAP_HANA_PORT | 30015 |
SAP_HANA_TENANT | S4P |
SAP_HANA_SCHEMA | SAPHANADB |
SAP_CLIENT | 100 |
SAP_LANGUAGE | E |
SAP_HANA_TLS | verify、自己署名証明書の場合は no-verify、または off |
SAP_HANA_USER / SAP_HANA_PASSWORD | AMCP_READER とそのパスワード |

インストール時にテスト呼び出し(sap_org_structure)を 1 回行い、認証情報と権限付与が機能するかどうかを知らせます。パスワードは暗号化して保存され、Claude に示されることはありません。

ステップ 4:MCP サーバーを Claude に追加する

claude.ai または Claude Desktop で Customize → Connectors → + → Add custom connector を開き、MCP サーバーの URL(AnythingMCP の MCP Servers に表示されます)を貼り付けてサインインします。Claude は Anthropic のサーバーから接続するため、claude.ai で使う URL は公開された HTTPS である必要があります。公開するのは MCP エンドポイントだけで、HANA のポートを公開することはありません。Claude Code ではローカルインスタンスも使えます:
claude mcp add --transport http sap-hana <your MCP server URL> --header "X-API-Key: <key>"
ステップ 5:質問する
まずはデータの範囲を絞る質問から始めましょう。たとえば「このシステムにはどの会社コードがあり、通貨は何ですか?」です。コネクタは Claude に最初に sap_guide を読むよう指示し、その後は Claude が自らディクショナリ用ツールを使って進めます。
利用可能なツール
| ツール | Claude に提供するもの |
|---|---|
sap_guide | SQL の観点から SAP のデータモデルをトピック別に説明:基本(クライアント、日付、先行ゼロ、通貨)、財務(ユニバーサルジャーナル ACDOCA)、販売、在庫、購買、オペレーション、落とし穴、クエリのレシピ。コストはかからず、データにも触れません。 |
sap_org_structure | 会社コード(通貨、勘定コード表、会計年度バリアント付き)、管理領域、プラント、販売組織、購買組織。 |
sap_search_tables | 名前または説明でテーブルを検索し、行数を表示。単純な SQL では誤って読んでしまう S/4HANA の互換ビューにはフラグを付けます。 |
sap_describe_table | 各項目の名称、キーフラグ、データ型、各金額の通貨項目または数量単位項目、チェックテーブル。 |
sap_find_fields | 業務上の項目(例:「正味支払期日」)を持つテーブル。 |
sap_field_values | 項目のコード値の意味(例:請求伝票カテゴリ)。 |
sap_table_relations | 外部キーとその結合条件、およびテキストテーブル。 |
sap_search_cds_views | 名前または名称で SAP の CDS ビューを検索し、リリース済みのものと分析用のものを示します。 |
sap_describe_cds_view | CDS ビューの列(名称、メジャー、通貨項目と単位項目)とアソシエーション。 |
sap_query | 読み取り専用の SELECT を 1 文。上限 1,000 行、タイムアウトあり。 |

コネクタが強制すること
SAP のネイティブドライバを使う
AnythingMCP には、SAP の純 JavaScript 製 HANA ドライバ hdb(Apache-2.0)が同梱されています。ユーザーとパスワード、TLS、マルチテナントシステムなど、コネクタが行うすべてに対応します。SAP のネイティブドライバ @sap/hana-client を使うと、Kerberos、セキュアユーザーストア(hdbuserstore)、コネクションプーリングも利用できます。これは SAP Developer License で公開されており、当社による再配布が認められていないため、イメージには一切含まれません。イメージを拡張するか、ボリュームとしてマウントして自分のデプロイ環境にインストールし、接続文字列の driver=hana-client、またはすべての HANA コネクタに適用する HANA_DRIVER=hana-client で選択します。本番環境での使用が SAP との契約でカバーされているか確認してください。arm64 ホストでは、同梱の hdb ドライバを使い続けるか、Debian ベースのイメージを自分でビルドしてください。詳しい手順:AnythingMCP ドキュメントの SAP HANA。
プロンプト例
- 「2025 年の会社コード 1010 の転記期間別売上高を表示してください。」
- 「30 日を超えて未決済の売掛金がある得意先はどこで、得意先ごとの金額はいくらですか?」
- 「今年の純売上高上位 10 社の得意先を、請求伝票から出してください。」
- 「仕訳を扱うリリース済みの分析用 CDS ビューはどれですか? 最初のビューのメジャーを説明してください。」
- 「請求伝票カテゴリ項目の値は、それぞれ何を意味しますか?」
- 「先月のプラント 1010 における移動タイプ別の在庫移動。」
トラブルシューティング
- CDS ビューが行を返さない。
SAP_CLIENTが未設定か誤っています。コネクタはCDS_CLIENTを設定するためにこの値を必要とします。 - 接続が拒否される、または不明なホストにリダイレクトされる。 システムデータベースのポートではなく、テナント自身の SQL ポートを使ってください。システムデータベースのポートは、コネクタが名前解決できない内部ホスト名にリダイレクトすることがあります。
- 「Insufficient privilege」。 そのテーブルがデータベースユーザーに付与されていません。権限を付与するか、読み取り可能なテーブルまたは CDS ビューを使うよう Claude に依頼してください。
- 証明書エラー。 自己署名証明書の場合は
SAP_HANA_TLS=no-verifyを使うか、CA をインストールしてください。 - クエリがタイムアウトする。 会社コード、期間、プラントで絞り込み、SQL で集計するよう Claude に依頼してください。
statementTimeoutを引き上げるのは、クエリが本当に大きい場合だけにしてください。
FAQ
このコネクタを通じて Claude が SAP のデータを変更することはできますか?
いいえ。HANA のセッションは読み取り専用で、実行されるのは SELECT 1 文だけです。書き込みとロックを伴う読み取りは拒否されます。データベースユーザーには SELECT 権限だけを付与し、HANA 側でも同じルールが適用されるようにしてください。
SAP の権限は尊重されますか? いいえ。SQL は SAP のアプリケーション権限を経由しないため、Claude が読めるものはデータベースの権限付与で決まります。SAP の権限チェックが必要な場合は、代わりに OData ルートを使うか、読まれても問題のないテーブルとビューだけを付与してください。
S/4HANA への直接 SQL アクセスは SAP のライセンスで認められていますか? HANA のライセンスによります。S/4HANA に付属するランタイムライセンスでは、サードパーティによる ABAP スキーマへの SQL アクセスは通常認められず、フルユースライセンスなら認められます。本番環境を接続する前に契約を確認してください。
S/4HANA Private Cloud(RISE)でも使えますか? はい。SAP がデータベースユーザーと HANA の SQL ポートへのネットワーク経路を用意し、そのポートに到達できる場所で AnythingMCP を動かせば使えます。どちらも SAP に申請してください。
セルフホストの代わりに AnythingMCP Cloud を使えますか? HANA の SQL ポートにインターネットから到達できる場合に限ります。そうした構成はまれで、推奨されることもほとんどありません。AnythingMCP は SAP のそばでセルフホストしてください。
ChatGPT や Copilot でも使えますか? はい。同じ MCP サーバーが ChatGPT(開発者モード、有料プラン)、GitHub Copilot、Cursor、Claude Code で、同じツールと同じ読み取り専用の制限のまま動作します。
SAP BTP や SAP Joule は必要ですか? いいえ。コネクタは HANA データベースと直接通信するため、BTP も Joule も SAP Gateway も必要ありません。両方を使う場合は、Joule と並行して動かすこともできます。
自分で運用できる SAP HANA MCP サーバーですか? はい。AnythingMCP はオープンソース(AGPL-3.0)で、SAP のそばで Docker Compose により動作します。sap-hana-mcp-server リポジトリはこのコネクタを単体でパッケージしたもので、SAP HANA MCP サーバーでは開発者向けに解説しています。
次のステップ
- SAP HANA MCP サーバー:同じコネクタを開発者の視点で解説
- OData を MCP に:SAP の権限チェック付きで S/4HANA オンプレミスに接続する、もう 1 つの方法
- SAP を Claude に接続:すべての SAP コネクタの一覧
- データベースを MCP に:SQL Server、PostgreSQL、Oracle と並ぶ、通常のデータベースコネクタとしての SAP HANA
- GitHub の SAP HANA ドキュメント:接続文字列のオプションとネイティブドライバ
このガイドは役に立ちましたか?