Skip to main content
Glama
yanivshoval0104

siebel-mcp-gateway

Siebel MCP Gateway

Oracle Siebel REST API をストリーミング可能な HTTP 上の MCP ツールとして公開し、エージェント型クライアントが Siebel の資格情報を保持することなく、Siebel レコードの照会・作成・更新・削除やオブジェクトカタログの取得を行えるようにします。

モックモードは、合成されたヘルスケア紹介のデモスキーマ(患者 → コミュニティ/病院紹介 → Form 17 コミットメント → 治療履歴)をモデル化しており、文書化された意図的なデータ品質の問題を滑らかにするのではなく、忠実に伝えるように構築されています。2 つの組織にまたがる重複患者レコード、実際には緊急度を保持しているステータスフィールド、ワークフローの明示された制限を静かに上書きするスクリプト、乖離する 2 つの「残り訪問回数」フィールドなどです。すべてのデータは合成です。

スタック

Python 3.12+、公式 mcp SDK(MCPServer。古い SDK バージョンでは FastMCP と呼ばれていたものの現在の名前)、外部への Siebel 呼び出し用の httpx、ASGI サーバーとしての uvicorn。

Related MCP server: MCP Gateway

ローカル実行

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Fill in .env, or for a first run without a live Siebel instance:
#   MOCK_MODE=true
#   MCP_GATEWAY_TOKEN=<any string you'll also give your client>
MOCK_MODE=true MCP_GATEWAY_TOKEN=dev-token \
  uvicorn app.server:app --host 0.0.0.0 --port 8000

ヘルスチェック: curl http://localhost:8000/healthz → {"status":"ok"}(認証不要のため、プラットフォームのヘルスチェッカーが動作します)。

MCP エンドポイント: http://localhost:8000/mcp — すべてのリクエストに Authorization: Bearer <MCP_GATEWAY_TOKEN> が必要です。公開デプロイ後、このエンドポイント自体には他のアクセス制御がないためです。

テスト

python3 -m pytest -v

すべてのテストはインメモリのモックストアまたはモックされた HTTP トランスポートに対して実行されます。ネットワーク呼び出しや実 Siebel インスタンスは不要です。

Render へのデプロイ

  1. このリポジトリを GitHub にプッシュします。

  2. まだ接続していない場合は、まず Render にリポジトリへのアクセスを許可します。 Render の GitHub App は、明示的にアクセスを許可されたリポジトリしか認識しません。新しいリポジトリは、あなたが所有しているだけでは Render のリポジトリ選択に表示されません。github.com/settings/installations に移動し、Render を見つけて Configure をクリックし、「All repositories」に切り替えるか、このリポジトリを許可リストに追加して Save します。その後、Render の接続画面に再び表示されます。

  3. Render ダッシュボードで: New → Blueprint(「Web Service」ではありません。このリポジトリには render.yaml があり、Blueprint がそれを読み取ります)。リポジトリを接続し、ブランチ main とデフォルトの render.yaml パスを確認します。

  4. Render は render.yaml で sync: false とマークされたすべての環境変数のフォームを表示します。デプロイ前にこれらを入力してください:

    • MCP_GATEWAY_TOKEN — 生成します。例: openssl rand -hex 32

    • MOCK_MODE — モックデータをすぐに提供する場合は true(実際の Siebel インスタンスがまだ準備できていない間は推奨)、下記に実際の Siebel 資格情報を入力する準備ができている場合は false

    • SIEBEL_BASE_URL / SIEBEL_USERNAME / SIEBEL_PASSWORD — MOCK_MODE=false の場合のみ必須。モックモードで開始する場合は空白のままにします

  5. Deploy Blueprint をクリックします。Render は https://<your-service>.onrender.com を割り当てます。

後でこれらを変更する場合(例: 実際の Siebel インスタンスの準備ができたら MOCK_MODE を切り替える): サービス(Blueprint ではなく)を開き、Environment タブで値を編集し、Save Changes をクリックすると再デプロイがトリガーされます。

デプロイされたゲートウェイに MCP クライアントを向ける

  • URL: https://<your-service>.onrender.com/mcp

  • トランスポート: ストリーミング可能な HTTP

  • 認証: OAuth ではなく静的なベアラートークン/API キー。ヘッダーを Authorization: Bearer <MCP_GATEWAY_TOKEN> に設定します(上記ステップ 4 と同じ値)。クライアントの認証 UI がヘッダー名と生の値を別々に要求する場合(1 つの結合ヘッダーではなく)、ヘッダー名は Authorization、値は Bearer <token>(「Bearer」という単語を含む)です。401 が返る場合は、生のトークンだけを渡してみてください。一部のクライアントは Bearer プレフィックスを自分で追加するためです。

実際にデプロイした際の注意点

  • モックストアはインメモリのみです。 セッション中に作成・更新・削除されたものは、そのサーバープロセスが稼働している間だけ保持されます。再デプロイ、または Render の無料ティアインスタンスが約 15 分のアイドル後にスピンダウンし、次のリクエストでコールドスタートすると、元のシードデータにリセットされます。これはモックモードの想定された動作であり、バグではありません。

  • mcp Python SDK のクライアント側トランスポート依存関係は httpx2 であり、通常の httpx ではありません。これは、このゲートウェイに対して SDK の streamable_http_client ヘルパーを使用して独自の MCP クライアントを書く場合にのみ関係します。高レベルなクライアントアプリではなく、http_client= 引数には通常の httpx.AsyncClient ではなく httpx2.AsyncClient が期待されます。

本番切り替えチェックリスト

実際の Siebel インスタンスが起動したら:

  • SIEBEL_BASE_URL を実際のインスタンスに設定(末尾スラッシュなし)。例: https://<siebel-host>/siebel/v1.0

  • SIEBEL_USERNAME / SIEBEL_PASSWORD を設定

  • インスタンスがまだ自己署名証明書を使用している場合のみ SIEBEL_VERIFY_TLS=false に設定。実際の証明書を取得したら true に戻す

  • MOCK_MODE=false に設定

  • 再デプロイし、実際のエージェントトラフィックを向ける前に siebel_list_objects と search_facilities でスモークテストを実行

ツール

汎用(任意のビジネスコンポーネントで動作: Contact、Employee、Medical Facility、Appointment Slot、Referral Request、Commitment Form、Treatment History):

ツール

目的

siebel_query

レコードの一覧/検索: searchspec、fields、page_size、start_row

siebel_get

row_id で 1 件のレコードを取得

siebel_create

fields ディクショナリからレコードを作成

siebel_update

row_id でレコードの fields を更新

siebel_delete

row_id でレコードを削除

siebel_list_objects

アカウントが公開しているビジネスコンポーネントを一覧表示

便利なラッパー。一般的なデモの要求に対してより薄い表面:

ツール

目的

search_facilities

専門コードおよび/または正確な市区町村で検索

search_contacts

姓のプレフィックスで検索

create_referral

患者 + 医師 + 専門 + 緊急度; ステージコード = COMMUNITY_SEARCH から開始

ここに組み込まれている Siebel REST API の前提に関する注記

  • 認証は、すべての外部呼び出しで HTTP Basic です(このゲートウェイ自体の受信 MCP リクエストに対するベアラートークンチェックとは別です。2 つの異なる認証レイヤーであり、混同しないでください)。

  • URL 構文は {BASE}/data/{BusinessObject}/{BusinessComponent} です。BO と BC はここでは常に同じ名前ではありません。例: Referral Request は Patient Referral BO の子 BC、Appointment Slot は Appointment Management の子 BC です。ツールは BC 名を受け取り、クライアントが内部で正しい BO を検索します。パスセグメントは URL エンコードされるため、複数単語の名前も機能します。

  • リスト応答は {"items": [...]} として届きます。各レコードの "links" 配列は、トークンを節約するためにモデルに返す前に削除されます。

  • 2xx 以外の応答は、HTTP ステータスコードと Siebel 自身のメッセージテキストとして表面化されます。401 には「Siebel 資格情報を確認してください」という明確なプレフィックスが付きます。外部呼び出しは 30 秒でタイムアウトします。

  • いくつかのフィールドは計算され、保存されません(Age、Days Waiting、Visits Remaining、Is Expired、Entry Gap Days、および Facility/Doctor/Patient 結合フィールド)。これらは読み取りのたびに新たに導出され、実際のビジネスコンポーネントの計算フィールド/結合フィールドとしての動作(物理的な列ではなく)と一致します。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Salesforce that exposes CLI, REST, Connect, Data 360, Bulk 2.0, and Einstein Models APIs as tools for any MCP-compatible client to manage orgs, data, and metadata.
    Apache 2.0
  • F
    license
    Not graded
    quality
    B
    maintenance
    A generic MCP gateway that exposes any HTTP-based SQL portal as LLM-friendly MCP tools and standard REST endpoints, serving both human users and AI agents simultaneously.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Siebel CRM with HTTP/SSE transport, enabling secure access to Siebel data and operations like accounts, contacts, opportunities, and queries. Designed to be deployed on Phala Cloud TEE for credential protection.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A universal MCP server for registering internal, external, and OpenAPI-based APIs as MCP tools. It exposes them to MCP clients via Streamable HTTP and provides admin portal, RBAC/session auth, credential injection, and audit logging.
    Academic Free v1.1