btp-mcp-server について
btp-mcp-server は、SAP Business Technology Platform を扱う開発者やエージェント向けのオープンソース MCP サーバーです。カタログ、サービスプラン、インスタンス、宛先、サービス推薦のツールを備え、レスポンスのキャッシュと一覧の全ページ取得に対応します。
主な機能
- 01グローバル BTP サービスカタログの閲覧
- 02サービスプランと無料プランの確認
- 03サブアカウントのインスタンスと状態の一覧
- 04設定済み宛先と認証方式の確認
- 05用途に応じたサービスの推薦
- 06レスポンスのキャッシュと一覧全ページ取得
活用シーン
- 01アカウントで利用可能なサービスの確認
- 02サブアカウントでの HANA Cloud 稼働確認
- 03外部宛先と認証方式の点検
- 04アプリケーション要件に合う BTP サービスの選定
MCP 対応
SAP BTP API を MCP 対応 AI クライアント向けのツールとして公開します。stdio と HTTP のトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SAP BTP Services Discovery — MCP Server
本番環境での使用に対応した MCP(Model Context Protocol)サーバーです。SAP BTP プラットフォームの API を、Claude Code、Cursor、Joule Studio、 LangGraph エージェントなど、MCP 互換のあらゆる AI エージェント向けのツールとして公開します。
Model Context Protocol を介して、あらゆる AI エージェントを SAP BTP のランドスケープに接続できます。
これは何ですか?
BTP MCP Server は、AI エージェントを SAP Business Technology Platform(BTP)API に接続する オープンソースの Model Context Protocol サーバーです。
よくある開発者の疑問に答えるために BTP Cockpit に切り替える代わりに、 AI エージェントに直接質問できます。
- 「自分のアカウントで利用できる BTP サービスは何ですか?」
- 「サブアカウントで HANA Cloud はすでに稼働していますか?」
- 「CAP アプリで非同期メッセージングが必要です。何を使えばよいですか?」
- 「どのような宛先が設定されていて、どの認証方式を使っていますか?」
Claude Code、Cursor、Joule Studio、LangGraph エージェント、 および MCP 互換のあらゆる AI クライアントで動作します。
ツール
| ツール | 回答する内容 |
|---|---|
list_btp_services | グローバルカタログにはどの BTP サービスがありますか? |
get_btp_service_plans | サービス X にはどのプランがありますか?無料のものはありますか? |
list_btp_instances | サブアカウントで何が稼働していますか?正常ですか? |
get_btp_destinations | どのような外部接続が設定されていますか? |
recommend_btp_service | ユースケースに合うサービスは何ですか? |
インストール
pip install btp-mcp-server
前提条件
BTP サブアカウントの Service Manager サービスキーが必要です。
取得手順:
- BTP Cockpit → 対象のサブアカウント → Services → Service Marketplace に移動します
- Service Manager を検索し、プラン
subaccount-adminでインスタンスを作成します - インスタンスの Service Key を作成します
- キーの JSON に認証情報が含まれています。詳しくは「設定」を参照してください
設定
すべての設定は環境変数で行います。.env.example を .env にコピーし、
Service Manager サービスキーの値を入力します。
# From your Service Manager service key JSON
BTP_CLIENT_ID=your-client-id # from "clientid"
BTP_CLIENT_SECRET=your-client-secret # from "clientsecret"
BTP_TOKEN_URL=https://your-subdomain.authentication.us10.hana.ondemand.com/oauth/token
BTP_SM_URL=https://service-manager.cfapps.us10.hana.ondemand.com # from "sm_url"
# From BTP Cockpit → your subaccount → Overview → "Subaccount ID"
BTP_SUBACCOUNT_ID=your-subaccount-guid
# Destination Service URL (region-specific — adjust region if needed)
BTP_DESTINATION_URL=https://destination.cfapps.us10.hana.ondemand.com
# Optional: cache TTL in seconds (default: 300)
# CACHE_TTL_SECONDS=300
注:
.envファイルを GitHub にコミットしないでください。 参照用テンプレートとして、実際の値を含まない.env.exampleを使用してください。
使い方
Claude Desktop を使用する場合
claude_desktop_config.json に追加します。
Mac: ~/.claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"sap-btp": {
"command": "btp-mcp-server",
"env": {
"BTP_CLIENT_ID": "your-client-id",
"BTP_CLIENT_SECRET": "your-client-secret",
"BTP_TOKEN_URL": "https://your-subdomain.authentication.us10.hana.ondemand.com/oauth/token",
"BTP_SM_URL": "https://service-manager.cfapps.us10.hana.ondemand.com",
"BTP_SUBACCOUNT_ID": "your-subaccount-guid",
"BTP_DESTINATION_URL": "https://destination.cfapps.us10.hana.ondemand.com"
}
}
}
}
Claude Desktop を再起動します。その後、次のように質問できます。
- 「利用できる BTP サービスは何ですか?」
- 「失敗したサービスインスタンスはありますか?」
- 「オンプレミスの SAP システムに接続したいです。どの BTP サービスを使えばよいですか?」
Claude Code / Cursor を使用する場合
{
"mcpServers": {
"sap-btp": {
"command": "btp-mcp-server",
"env": {
"BTP_CLIENT_ID": "...",
"BTP_CLIENT_SECRET": "...",
"BTP_TOKEN_URL": "...",
"BTP_SM_URL": "...",
"BTP_SUBACCOUNT_ID": "..."
}
}
}
}
LangGraph エージェントを使用する場合
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from langchain_anthropic import ChatAnthropic
async with MultiServerMCPClient({
"btp": {
"command": "btp-mcp-server",
"transport": "stdio",
"env": {
"BTP_CLIENT_ID": "...",
"BTP_CLIENT_SECRET": "...",
"BTP_TOKEN_URL": "...",
"BTP_SM_URL": "...",
"BTP_SUBACCOUNT_ID": "...",
}
}
}) as client:
tools = client.get_tools()
agent = create_react_agent(
ChatAnthropic(model="claude-sonnet-4-6"),
tools
)
result = await agent.ainvoke({
"messages": [{"role": "user", "content":
"What BTP services do I have? Is there anything I should use for messaging?"
}]
})
Joule Studio(BTP)を使用する場合
HTTP モードでデプロイし、BTP 宛先として登録します。
MCP_TRANSPORT=http btp-mcp-server
# Server starts at http://0.0.0.0:8080/mcp
次に、BTP Cockpit → Destinations で、サーバー URL を指す宛先を作成します。 Joule Studio Agent Builder → Tools → Add MCP Server で、その宛先を選択します。
ソースからローカルで実行する
git clone https://github.com/ABRANJAN07/btp-mcp-server.git
cd btp-mcp-server
pip install -r requirements.txt
cp .env.example .env
# fill in .env with your BTP credentials
# Test BTP connectivity
python test_connection.py
# Start the MCP server
python server.py
テストの実行
テストではモックの BTP レスポンスを使用するため、実際の認証情報は必要ありません。
pip install -r requirements.txt
pytest tests/ -v
期待される出力:17 tests passed
プロジェクト構成
btp-mcp-server/
├── server.py ← MCP server entry point (5 tools)
├── test_connection.py ← Verify BTP connectivity
├── requirements.txt
├── .env.example ← Configuration template
├── btp_mcp/
│ ├── config.py ← Reads .env settings
│ ├── auth.py ← OAuth2 token management
│ ├── btp_client.py ← BTP API calls + caching
│ ├── cache.py ← TTL cache
│ └── models.py ← Pydantic response models
└── tests/
└── test_tools.py ← 17 tests with mocked responses
仕組み
AI Agent (Claude / Cursor / LangGraph)
│
│ MCP Protocol (stdio)
▼
BTP MCP Server (this package)
│ OAuth2 client_credentials
│ + TTL cache (5 min)
▼
SAP BTP APIs
├── Service Manager API → service catalog, instances, plans
└── Destination API → configured connections
キャッシュ: BTP API のレスポンスは、デフォルトで 5 分間キャッシュされます。 サービスカタログとインスタンス一覧はほとんど変更されないため、キャッシュによってデータの鮮度を損なうことなく、レスポンスを高速化できます。
ページネーション: すべての一覧エンドポイントは、最初の 50 件だけでなく、BTP からすべてのページを取得します。
ロードマップ
これは、AI を活用した包括的な BTP 運用プラットフォームの構築を目指す 6 フェーズプロジェクトの フェーズ 2 です。
| フェーズ | ステータス | 説明 |
|---|---|---|
| フェーズ 1 | ✅ 完了 | BTP 認証 + 2 つのツール + ローカル MCP サーバー |
| フェーズ 2 | ✅ 完了 | 5 つのツール + キャッシュ + ページネーション + テスト + PyPI |
| フェーズ 3 | 🔜 次の予定 | LangGraph エージェント + FastAPI ストリーミング + メモリ |
| フェーズ 4 | 📋 予定 | Chainlit プロトタイプ → BTP 上の React + UI5 Web Components |
| フェーズ 5 | 📋 予定 | マルチエージェントスーパーバイザー + RAG + プロアクティブアラート |
| フェーズ 6 | 📋 予定 | 本番環境向けの強化 + CI/CD + BTP マーケットプレイス |
近日公開(フェーズ 3)
- 複数ターンの会話メモリを備えた LangGraph ReAct エージェント
- FastAPI SSE ストリーミングエンドポイント
- 推奨サービスのコード生成 (CAP バインディング設定、CLI コマンド、YAML マニフェスト)
Entitlements API(一時的に無効)
get_btp_entitlements ツールには、別途
Cloud Management Service(CIS Central プラン)のサービスキーが必要です。
コードはすべて記述済みで、コメントアウトされています。有効化する準備ができたら、
ENTITLEMENTS_SETUP.md を参照してください。
コントリビューション
コントリビューションを歓迎します!変更したい内容について議論するため、まず Issue を作成してください。
git clone https://github.com/ABRANJAN07/btp-mcp-server.git
cd btp-mcp-server
pip install -r requirements.txt
pytest tests/ -v # make sure tests pass before submitting a PR
ライセンス
MIT — 詳細は LICENSE を参照してください。
作者
Abhijeet Ranjan が、 AI + SAP BTP 統合に関するシリーズの一環として作成しました。
フェーズ 3 の最新情報は、LinkedIn でご確認ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。