Claude Media
Claude CodeでSAP HANA CLIのMCPを使う — 登録と権限の設計

Claude CodeでSAP HANA CLIのMCPを使う — 登録と権限の設計

hana-cliのMCPサーバーをClaude Codeに登録し、HANAのテーブル参照・データインポート・性能調査を任せる手順。接続情報の置き方と、読み取りだけ許可する権限設定まで。

SAP HANAのデータベースを触る作業を、Claude Codeから自然言語で頼めるようにするのがhana-cliのMCPサーバーです。hana-cliはSAPのサンプルプロジェクトとして公開されているNode.js製のコマンドラインツールで、テーブル一覧、データのインポートとエクスポート、性能調査などの操作をひとまとめにしています。MCPサーバーはそのコマンドをツールとして公開します。

この記事では、Claude Codeへの登録方法を3通り比べ、接続情報の置き方、動作確認、そして書き込み系のツールを勝手に走らせない権限設定までを順に書きます。

hana-cliのMCPサーバーは何を公開するのか

hana-cliのMCPサーバーは、hana-cliの全コマンドをMCPツールとして外に出す仕組みです。ただし最初から全部を並べません。起動直後に登録されるのは約22個で、必要になった分だけ増やす段階公開の設計です。

層主なツール役割
常時主なツールhana_query_simple / hana_tables / hana_inspect_table / hana_views / hana_status役割接続確認、一覧、構造の確認、SQL実行
ルーター主なツールhana_execute役割上記以外のコマンドを名前で呼び出す
発見系主なツールhana_recommend / hana_search / hana_discover_by_category ほか役割目的に合うコマンドを探す
内容系主なツールhana_examples / hana_parameter_presets / hana_get_doc ほか役割使用例とドキュメントを返す
動的主なツール最大50個役割カテゴリを探索したときに追加される

総数の書き方はページによって違います。MCP統合ガイドは全186コマンド、Claude Code用プラグインのREADMEは166ツールとしています。数が一致しないので、手元で使えるツールは/mcpの画面で数えるのが確実です。

登録方法は3つ。どれを選ぶか

登録の入口は複数あります。Claude Codeで使うなら次の3つが現実的です。

方法コマンド向く場面
claude mcp addコマンドclaude mcp add --transport stdio hana-cli -- npx -y -p hana-cli hana-cli-mcp向く場面まず試す。hana-cliのインストール不要
プラグインコマンド/plugin install https://github.com/SAP-samples/hana-cli-claude-plugin向く場面配布形態に乗せたい
hana-cli自身コマンドhana-cli mcp --client claude-code向く場面hana-cliを導入済みで設定ファイルを自動で書かせたい

npxで登録する(最短)

Claude Codeのドキュメントにある標準形は、--の前にClaude側のオプション、後ろにサーバーを起動するコマンドを置く書き方です。-p hana-cliの-pは--より後ろなので、Claude Codeではなくnpxに渡ります。

claude mcp add --transport stdio hana-cli -- \
  npx -y -p hana-cli hana-cli-mcp
claude mcp get hana-cli

claude mcp addはスコープを指定しない場合、ローカルスコープ(自分だけ・そのプロジェクトだけ)に書き込みます。チームで共有するなら--scope projectを付けると、プロジェクト直下の.mcp.jsonに入ります。共有した.mcp.jsonのサーバーは、各メンバーがclaudeを開いて承認するまでPending approvalのままです。

JSONで直接書くなら、.mcp.jsonに次の形です(hana-cliのドキュメントにある例)。

{
  "mcpServers": {
    "hana-cli": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "-p", "hana-cli", "hana-cli-mcp"]
    }
  }
}

hana-cli mcpで設定を書かせる

hana-cliを入れているなら、設定ファイルへの書き込みを任せる手もあります。

hana-cli mcp --dry-run
hana-cli mcp --client claude-code
hana-cli mcp-status

先に--dry-runで書き込み内容を見ます。--clientを省略した自動検出では、すでに存在する設定ファイルにしか書きません。ドキュメントによると、この方法はMCPサーバーのビルド済みが前提です。ソースを取得した場合はmcp-serverでnpm installとnpm run buildが要ります。

注意点が1つあります。--globalの説明文には書き込み先が~/.claude/settings.jsonとある一方、同じページの対応表は~/.claude.jsonです。Claude Codeはsettings.jsonのmcpServersを読まないので、実行後はclaude mcp listにhana-cliが出ているかを必ず確かめてください。

プラグイン経由の場合

プラグインで入れると、ツール名の形が変わります。Claude Codeのドキュメントでは、プラグイン同梱のMCPサーバーのツール名はmcp__plugin_<プラグイン名>_<サーバー名>__<ツール名>です。次の章の権限ルールは、この名前に合わせて書き換えます。実際の名前は/mcpでツールを選ぶと見えます。

接続情報は登録より先に用意する

MCPサーバーを登録しても、HANAへの接続情報が無ければツールは何も返せません。hana-cliは次の順で接続設定を探します。

  1. 管理者モードならdefault-env-admin.json
  2. .cdsrc-private.json(CAPのcds bindで資格情報を動的に取得)
  3. .envのVCAP_SERVICES
  4. --connで指定したファイル
  5. カレントか親ディレクトリ5階層以内のdefault-env.json
  6. ~/.hana-cli/default.json

BTPのHANA Cloudなら、サービスキーからdefault-env.jsonを作れます。対話式の設定もあります。

hana-cli serviceKey -i <インスタンス名> -k <キー名>
hana-cli connect
hana-cli status

default-env.jsonにはパスワードが平文で入ります。READMEは、.cdsrc-private.jsonを使う方法を最も安全な選択肢としています。資格情報をローカルに置かず、実行のたびにCloud FoundryやKubernetesから取る方式です。代わりにコマンドごとに数秒余計にかかります。

複数プロジェクトを行き来するなら、各ツールが受け取る__projectContextパラメーターでprojectPathとconnectionFileを指定する方法もあります。

動作確認と最初の依頼

登録後は3段階で確かめます。

  1. シェルでclaude mcp get hana-cliを実行し、接続状態を見る
  2. Claude Code内で/mcpを開き、hana-cliのツール一覧を見る
  3. 「hana_statusで接続を確認して」と頼み、接続先ホストとユーザーが返るか見る

3で接続できたら、読み取りの依頼から始めます。

HRスキーマのテーブルを一覧にして、ORDERSの列定義を見せて。
更新は一切しないで。

この依頼にはhana_tablesとhana_inspect_tableが対応します。複雑な依頼のために、hana_recommendで目的に合うコマンドを探す入口も用意されています。たとえば「顧客テーブルの重複行を探したい」と伝えると、候補のコマンドと確信度、パラメーターのひな形を返すとドキュメントは説明しています。

引数が分からないコマンドは使用例から引く

ルーター越しのコマンドは引数の名前が分かりにくいものです。hana_examplesにコマンド名を渡すと複数の使用例が返り、hana_parameter_presetsは用途別の引数の組み合わせを返します。たとえばデータ品質を調べるdataProfileには、data_qualityという用途のプリセットがドキュメントに載っています。引数を推測で組ませる前に、この2つを先に引かせると呼び出しの失敗が減ります。

22個から186コマンドへ — ルーターと動的昇格の仕組み

常時登録のツールに無い操作は、2つの経路で使えます。

  • ルーター: hana_executeにコマンド名と引数を渡す。dataProfile、import、compareSchemaなどが対象
  • 動的昇格: hana_discover_by_categoryでカテゴリを調べると、そのカテゴリのツールが直接呼べるツールになる

動的昇格が起きるとサーバーはtools/list_changed通知を送り、クライアントがツール一覧を更新します。昇格できるのは最大50個で、超えると古いカテゴリから外れます。

全部を最初から出したいなら、起動引数に--fullを足します。

{
  "mcpServers": {
    "hana-cli": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "-p", "hana-cli", "hana-cli-mcp", "--full"]
    }
  }
}

Claude Codeにはツール検索の仕組みがあり、MCPツールが多くても毎回すべてをコンテキストに載せません。既定の約22個から始め、ルーター越しの呼び出しが手間になったときに--fullを試す順で足ります。全ツールを出す場合、Claude Codeはフルネームが128文字を超えるMCPツールを送信対象から外します。/mcpで出ないツールがあれば、ツール名の長さ上限の記事の確認手順が使えます。

権限設計 — 読む、書く、消すを分ける

ルーターのhana_executeは、名前を指定すれば任意のhana-cliコマンドを呼べます。インポートも、バックアップの操作も、HDIコンテナの操作もその経路です。許可ルールを雑に書くと、読み取りのつもりで書き込みまで通ります。

Claude Codeの許可ルールはmcp__<サーバー名>__<ツール名>の形です。許可側のワイルドカードはmcp__<サーバー名>__というリテラルの接頭辞の後ろにしか使えません。そこで、読み取り中心の常時ツールだけを個別に許可し、hana_executeとhana_query_simpleは都度確認にします。

{
  "permissions": {
    "allow": [
      "mcp__hana-cli__hana_status",
      "mcp__hana-cli__hana_tables",
      "mcp__hana-cli__hana_views",
      "mcp__hana-cli__hana_inspect_table"
    ],
    "deny": [
      "Read(./default-env.json)",
      "Read(./default-env-admin.json)"
    ]
  }
}

この設定の意図は次のとおりです。

  • 構造を見るだけの4ツールは確認なしで通す
  • hana_query_simpleは「SQLを実行する」と説明されているだけで、SELECT以外を拒否するかはページに記載がない。許可に入れない
  • hana_executeは書き込み系のコマンドも通る経路なので許可に入れない
  • 資格情報ファイルはReadの拒否ルールでClaudeのファイルツールから隠す(MCPサーバーは別プロセスなので、接続には影響しない)

プラグインで入れた場合は、先に述べたプラグイン用のフルネームに置き換えてください。

最後の砦はデータベース側です。権限ルールはClaude Codeの内側の話で、HANAのユーザーに書き込み権限があれば、承認ボタンを押した時点で書き込みは通ります。調査用には、SELECT権限だけを持つ専用ユーザーのdefault-env.jsonを用意するのが堅実です。権限の付け方はHANA側の設計で決まります。書き込み系のコマンドが失敗する構成にしておけば、承認を誤っても被害が止まります。

データのインポートは「dryRunを先に」をCLAUDE.mdに書く

書き込みを頼むときの手順も、hana-cliのドキュメントにあります。safe-importというワークフローは5段階です。

手順

safe-importの流れ

  1. 1

    dry run

    dryRun: trueでインポートを試走する。

  2. 2

    エラーを確認

    試走の出力から取り込めない行を洗い出す。

  3. 3

    検証

    データの検証コマンドで制約違反を確かめる。

  4. 4

    インポート

    dryRunを外して本番実行する。

  5. 5

    結果の確認

    件数と内容を確認する。

ワークフローを一覧するのはhana_workflows、個別の手順を取るのはhana_workflow_by_idです。ただしドキュメントによると、手順を実行するのはAIエージェントで、テンプレートは順序と推奨パラメーターを示すだけです。順番を飛ばさせないために、Claude Code側にも規約を置きます。

# HANA操作の規約(CLAUDE.md)
- HANAの操作はhana-cliのMCPツールで行い、hdbsqlを直接叩かない
- 書き込みを伴うインポートは、必ず`dryRun: true`を先に実行して結果を報告する
- 報告を受けてから本実行に進み、実行後に件数を確認する
- 接続先がdefault-env.jsonのどれかを最初に`hana_status`で表示する
- default-env-admin.jsonは読まない

「接続先をまず表示させる」ルールは、開発用と本番用の接続を取り違えるミスへの保険になります。

つまずきと対処

症状原因の候補対処
claude mcp listに出ない原因の候補hana-cli mcpの書き込み先がClaude Codeの読む場所と違う対処claude mcp addで入れ直す
ツールが0個原因の候補ビルド失敗、依存関係の不足(ソースから入れた場合)対処mcp-serverでnpm installとnpm run buildを再実行
接続エラー原因の候補default-env.jsonが見つからない、ホスト・認証の誤り対処hana-cli statusをシェルで直接実行して切り分ける
一覧が空原因の候補スキーマ指定やユーザーの権限対処ドキュメントの「Zero Results from List Commands」の手順を確認
実行がタイムアウト原因の候補クエリが重い、ネットワーク遅延対処--timeoutを延ばす、--schemaや--tableで絞る
件数が表示と違う原因の候補ページごとに総数の書き方が違う対処/mcpで実際の個数を数える

Node.jsの要件もページで食い違います。メインのREADMEとMCP設定の章は22以上、プラグインのREADMEは20.19.0以上、トラブルシューティングは14以上と書いています。メインのREADMEは「24 LTS推奨」とも書いているので、迷うなら22以上、できれば24で揃えてください。

まとめ

登録そのものはclaude mcp addの1行で終わります。作業の中心は、接続情報を平文で置かない構成を選ぶことと、hana_executeを許可に入れない権限設計の2つです。まずは読み取り専用ユーザーでhana_statusから始め、書き込みはdryRunを挟む規約をCLAUDE.mdに置いてから任せる流れが、事故の幅を小さく保てます。

SAP開発の周辺では、CDSモデルを検索するcds-mcpの記事や、UI側を担うUI5 MCPサーバーの記事も同じMCPの仕組みで動きます。

この記事を共有:XはてブLinkedIn