Skip to main content
Glama
yanivshoval0104

siebel-mcp-gateway

Siebel MCP Gateway

Предоставляет Oracle Siebel REST API в виде MCP-инструментов через потоковый HTTP, чтобы агентный клиент мог запрашивать/создавать/обновлять/удалять записи Siebel и получать каталог объектов, не храня у себя учётные данные Siebel.

Режим mock моделирует синтетическую демо-схему направления в здравоохранении (пациент → направление в сообщество/больницу → обязательство по форме 17 → история лечения), созданную так, чтобы честно отражать набор задокументированных, намеренных дефектов качества данных, а не сглаживать их — дублирующиеся записи пациентов в двух организациях, поле статуса, которое на самом деле содержит срочность, скрипт, который молча переопределяет заявленные ограничения Workflow, два поля «осталось визитов», которые расходятся. Все данные синтетические.

Стек

Python 3.12+, официальный SDK mcp (MCPServer, текущее название того, что в старых версиях SDK называлось FastMCP), httpx для исходящих вызовов Siebel, uvicorn в качестве ASGI-сервера.

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 доступ к репозиторию, если он ещё не подключён. GitHub App от Render видит только те репозитории, к которым ему явно предоставлен доступ — новый репозиторий не появится в списке выбора репозиториев 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 покажет форму для каждой переменной окружения, помеченной sync: false в render.yaml — заполните их перед развёртыванием:

    • MCP_GATEWAY_TOKEN — сгенерируйте, например, openssl rand -hex 32

    • MOCK_MODE — true, чтобы сразу начать обслуживать mock-данные (рекомендуется, пока реальный экземпляр Siebel ещё не готов), false, если у вас уже есть реальные учётные данные Siebel для ввода ниже

    • SIEBEL_BASE_URL / SIEBEL_USERNAME / SIEBEL_PASSWORD — требуются только если MOCK_MODE=false; оставьте пустыми, если начинаете в mock-режиме

  5. Нажмите Deploy Blueprint. Render назначит https://<your-service>.onrender.com.

Чтобы позже изменить любые из этих значений (например, переключить MOCK_MODE, когда реальный экземпляр Siebel будет готов): откройте сервис (не Blueprint) → вкладка Environment → измените значение → Save Changes, что вызовет повторное развёртывание.

Подключение вашего MCP-клиента к развёрнутому шлюзу

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

  • Транспорт: потоковый HTTP

  • Аутентификация: статический bearer-токен/API-ключ, не OAuth — установите заголовок Authorization: Bearer <MCP_GATEWAY_TOKEN> (то же значение из шага 4 выше). Если интерфейс аутентификации вашего клиента запрашивает имя заголовка и значение по отдельности, а не один объединённый заголовок, имя заголовка — Authorization, значение — Bearer <token> (включая слово «Bearer») — если это даёт 401, попробуйте передать только сам токен, так как некоторые клиенты добавляют префикс Bearer сами.

Заметки из реального развёртывания

  • Mock-хранилище только в памяти. Всё, что создано/обновлено/удалено во время сеанса, сохраняется только до тех пор, пока работает процесс сервера. Повторное развёртывание или остановка бесплатного экземпляра Render после ~15 минут простоя и холодный старт при следующем запросе сбрасывают его обратно к исходным данным. Это ожидаемое поведение mock-режима, а не ошибка.

  • Зависимость клиентского транспорта Python SDK mcp — это httpx2, а не обычный httpx — это актуально только если вы пишете собственного MCP-клиента для этого шлюза, используя хелпер streamable_http_client из SDK, а не высокоуровневое клиентское приложение; он ожидает httpx2.AsyncClient для аргумента http_client=, а не обычный httpx.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

siebel_create

Создать запись из словаря fields

siebel_update

Обновить fields записи по row_id

siebel_delete

Удалить запись по row_id

siebel_list_objects

Список бизнес-компонентов, доступных учётной записи

Удобные обёртки, более тонкая поверхность для типовых демо-запросов:

Инструмент

Назначение

search_facilities

По коду специальности и/или точному городу

search_contacts

По префиксу фамилии

create_referral

Пациент + врач + специальность + срочность; начинается с Stage Code = COMMUNITY_SEARCH

Примечания о допущениях Siebel REST API, заложенных здесь

  • Аутентификация — HTTP Basic на каждом исходящем вызове (отдельно от собственной проверки bearer-токена этого шлюза на входящих MCP-запросах — два разных уровня аутентификации, не путайте их).

  • Грамматика URL: {BASE}/data/{BusinessObject}/{BusinessComponent}. BO и BC не всегда имеют одинаковые имена — например, Referral Request — дочерний BC в BO Patient Referral, Appointment Slot — дочерний BC в Appointment Management. Инструменты принимают имя 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