Back to Updates

Platform Update — October 30, 2026

ibl.ai Engineering
Application

Twelve services and packages moved in two weeks, led by an end-to-end MCP overhaul with a vendor-synced server catalog, per-tenant OAuth and per-user toggles, alongside Bedrock and Vertex model-catalog sync, per-user LLM spend caps, an edX proxy, text and Excel chat exports, LTI 1.3 standalone agent launches, and CDN-served edX assets.

Platform digest covering releases from iblai/iblai-prod-images (platform pins 1.316.0 – 1.355.0) and iblai/iblai-web-frontend (SDK and app packages), published between 2026-10-16 and 2026-10-30.

Service / PackageImage / PinVersion Span
dmiblai-dm-pro4.426.1-ai → 4.462.0-ai
osiblai-os-spa0.171.3 → 0.183.1
edxiblai-edx-prosumac.2.65.0 → sumac.2.70.1
lmsiblai-lms-spa0.95.0 → 0.100.1
authiblai-auth-spa2.8.1 → 2.9.0
cliibl-cli7.30.0 → 7.33.0
web-containers@iblai/web-containers1.44.3 → 1.59.1
web-utils@iblai/web-utils2.9.4 → 2.18.0
data-layer@iblai/data-layer1.30.3 → 1.38.1
mcp@iblai/mcp1.31.0 → 1.37.1
agent-ai@iblai/agent-ai2.13.1 → 2.13.3
iblai-js@iblai/iblai-js2.40.6 → 2.59.1

iblai-dm-pro (4.426.1-ai → 4.462.0-ai)

MCP overhaul (Phases 1–4). The MCP integration was rewritten end to end across four phases:

  • Phase 1 — langchain.mcp migration. MCP tools now load through langchain.mcp (MCPAdapter / FastMCP 4), replacing the deprecated langchain-mcp-adapters. The langchain stack is bumped (langchain 1.4.5, langchain-core 1.6.10, mcp 2.3.0). The websocket transport is removed — existing websocket servers are migrated to streamable_http. Deploy: migration 0392.
  • Phase 1B — OAuth discovery & DCR rewrite. MCP OAuth discovery now follows the RFC 9728 / RFC 8414 / OIDC metadata chain, and DCR was rewritten for spec compliance. PKCE (S256) and RFC 8707 resource are sent on OAuth flows for MCP-discovered clients. Linear, Notion, Atlassian, Sentry, HeyGen and Keycloak now register. Deploy: migration 0393.
  • Phase 2 — tenant credentials. Per-tenant OAuth clients (TenantOAuthClient) with one resolver for every OAuth call site. Each tenant registers its own DCR client (no cross-tenant collision). credentials/ and verify/ endpoints for admin-held OAuth and API-key secrets. Configurable authorization_params / token_params per provider and per tenant client. Deploy: migrations 0394–0396.
  • Phase 3 — per-user and per-session toggles. Users turn MCP servers on or off for themselves (mcp-servers/{id}/preference/) or per chat session (session-preference/). auth_scope is now enforced: user uses only the user's own connection, mentor only the user's or that mentor's. A user-scoped connection can only use its own user's connected service. Deploy: migrations 0397–0398, then seed_rbac_data.
  • Phase 4 — MCP Registry catalog. MCP servers published by their vendor are synced from the official MCP Registry, probed for auth type and DCR support, and published as global servers. Staff curate through Django admin. New curated servers: Slack, Gmail, Google Calendar, Google Drive. Registry OAuth servers that offer DCR register per-tenant clients on first sign-in. Deploy: migrations 0399–0400, then seed_default_oauth_providers, sync_mcp_registry --full --probe, seed_flows.
  • MCP OAuth refinements. oauth-find accepts an admin's own OAuth client (client_id, client_secret, authorization_url, token_url). Default redirect URI is now https://{SPA_DOMAIN}/google-oauth-callback/. Registry servers get Title Case names and downloaded images. MCP network time is bounded: unreachable servers fail in ~5 s, discovery has a 15 s budget, and a failing server in chat is skipped alone within 15 s. MCP_OAUTH_REDIRECT_URI setting. Deploy: migrations 0404–0406, then repair_mcp_oauth_redirects --apply and backfill_mcp_server_images.
  • OAuth token normalization. MCP connections (e.g. GitHub Copilot) no longer fail when the token endpoint returns expires_in as a string.

Bedrock & Vertex catalogue sync. sync_llm_catalog --gateway bedrock and --gateway vertex sync models from the Model Garden / Bedrock into the LLM routes registry. Routes are priced at the author's list price and kept off until verified. Models whose last gateway route is retired are deprecated. Daily beat entries sync_bedrock_catalog (03:30 UTC) and sync_vertex_catalog (03:50 UTC). Deploy: migration 0403.

edX proxy. /v1/lms/{edx_path} and /v1/studio/{edx_path} forward requests to edX as the calling platform member, so a client can call edX with its DM token. The edX JWT is minted through the LMS, cached per user (encrypted with FIELD_ENCRYPTION_KEY), and replaced 10 min before expiry. EdxProxyRule allows, denies or blocks edX paths — sync them with sync_edx_proxy_rules. Two exact SSO paths are reopened inside the global ibl/ai/sso/* block so the SPA can load course iframes with a DM token. Settings: EDX_PROXY_READ_THROTTLE_RATE (600/min), EDX_PROXY_WRITE_THROTTLE_RATE (120/min), EDX_PROXY_MAX_BODY_SIZE (250 MB). Deploy: migrations core.0071–core.0072, then sync_edx_proxy_rules.

Per-user LLM spend caps. SpendCap scope user caps one member's total LLM spend across every agent. A tenant default cap auto-applies to new members on their first UserPlatformLink. Admin endpoints under /api/ai-mentor/orgs/<org>/spend-caps/users/. Setting: MENTOR_NEW_USER_SPEND_CAP_DEFAULT (default disabled). Deploy: migration 0402, then seed_rbac_data.

RAG retrieval tuning. RAG_RETRIEVAL_K (default 4) sets the global chunk count; a mentor's own rag_retrieval_k still wins. RAG_RETRIEVAL_K_FORCE_PLATFORM_DEFAULT makes every mentor use the platform default. Prioritized document-filter RAG now uses history-aware multi-query expansion. RAG_DISABLE_PRODUCT_METADATA_AUGMENTATION drops all payload.metadata from the RAG query, leaving only the question.

Readable CSV reports. Report downloads now keep line breaks, export agent chat messages as plain text, and list document_sources one per line with presigned URL signatures stripped. REPORT_DOWNLOAD_CSV_READABLE (default on); clean=0 restores flattened output.

Shareable link tokens. Chat payloads accept shareable_link_token for share-link sessions.

Platform metadata on login. GET /api/core/users/platforms/ carries metadata (the platform's public metadata). POST consolidated-token/proxy/ carries user_metadata (the user's DM-held metadata). Settings USER_PLATFORMS_INCLUDE_METADATA and CONSOLIDATED_TOKEN_INCLUDE_USER_METADATA (both default true).

LTI 1.3 email display. An LTI 1.3 user's email is shown as the address from their LTI launch instead of the @edx-lti-1p3.com placeholder, across mentor responses, analytics and CSV exports.

Course metadata v1 endpoint. GET /v1/courses/metadata?course_id=<id> returns a course's metadata served from DM storage — Studio details, block outlines, pricing, certificate availability — so the SPA does not have to call edX separately.

Raw RBAC permissions endpoint. GET /v1/rbac/permissions/ returns the raw grants for a user or API key.

Platform API key listing. A new endpoint lists the platform API keys the user has access to.

Mentor default model enforcement. Mentors created through the API, workflows, course-creation assessments, or default backfills now always receive the tenant's default model.

Billing creator access. The payment access check grants the item's creator (mentor created_by and pathway authors) directly, with reason: "creator".

Plaintext credential retirement. The plaintext credential columns (LLMCredential.value, GlobalCredential.value, IntegrationCredential.value, etc.) are retired from the models. Nothing reads or writes them. Deploy: migration 0401.

Bot app removal. The old bot app (Slack, Discord, Webex, WhatsApp, Teams bots configured per tenant) and its api/ai-bot/ routes are removed. Dependencies slack-bolt, discord-py, webexteamssdk, botbuilder-*, pylatex, ImageMagick and the LaTeX toolchain are dropped from the image. Deploy: migration 0408 (detaches tables; follow-up drops them later).

TTS reliability. The chat-message TTS endpoint no longer streams through GZipMiddleware; provider failures before audio produce a 502 with a specific code; failures after the first byte abort cleanly. Provider calls are retried once for transient failures.

Mentor metadata task rate-limiting. populate_mentor_metadata retries provider 429s with backoff and runs under a configurable MENTOR_METADATA_TASK_RATE_LIMIT (default 20/m).

mentor-llms gateway info. Chat models now carry gateway / gateway_label showing which gateway will serve them. Claude on Vertex is never sent temperature.

TLS trust store refresh. certifi 2026.10.19 across DM, CLI and edX images following the eMudhra/emSign certificate-authority incident.

Deploy summary (DM): migrations 0392–0409, core.0071–core.0072. Post-migration commands: seed_rbac_data, seed_default_oauth_providers, sync_mcp_registry --full --probe, seed_flows, sync_edx_proxy_rules, sync_llm_catalog --gateway bedrock, sync_llm_catalog --gateway vertex, repair_mcp_oauth_redirects --apply, backfill_mcp_server_images, backfill_mentor_llm_defaults, queue_course_info_sync --all.


iblai-os-spa (0.171.3 → 0.183.1)

User Models dialog. The in-chat model change toggle moved from the chat header to the LLM tab in agent settings. Users can pick from their own models in a new User Models dialog.

Chat downloads. The chat download dialog now lets users choose between text and Excel export formats and can export the whole chat from the sidebar. On the desktop app (Tauri), files save through the native save dialog.

Chrome extension updates (1.1.6 → 1.1.10). The extension acts by position on a screenshot, lists on-screen elements, double-clicks to open elements, shows selected state, handles iframes, reads only on-screen text, and runs with a 200-minute limit instead of step/token caps, with automatic retries on failures.

Per-tab auth storage. The Mentor AI app can wire auth to per-tab storage (flag off by default, NEXT_PUBLIC_IBL_PER_TAB_AUTH). Tauri offline restore fills only empty stores without clobbering.

Agent settings. New settings tabs: Context Limits (token budgets for agent conversations), Allowed File Types (restrict upload extensions per agent), and an admin-visibility confirmation dialog when narrowing "Who Can View?" to administrators. The prompt popup gained a Save button.

Embed improvements. The user profile moved next to the Close button in embed mode. The app re-hydrates in place on MENTOR:AUTH_UPDATE instead of reloading. Service workers are not registered inside iframes.

Mentor Skills tab. The Skills tab is now a thin wrapper over the SDK's AgentSkillsTab component.

iOS layout. HTML/body overscroll is disabled so iOS swipes cannot shift the app.

Explore page. Clicking "Explore Agents" when already in the Explore view scrolls back to the top with a toggle chevron. The page title uses proper capitalization.

Cowork flag. The panel reads the enable-cowork flag from the backend.

Desktop app (Tauri). Releases v0.95.27 through v0.95.30.


iblai-edx-pro (sumac.2.65.0 → sumac.2.70.1)

S3 static asset publishing. The build's final step syncs /openedx/staticfiles to S3 under a per-tag directory, so assets served from the CDN match the image that built them. BuildKit is required; AWS credentials are passed as secrets. CSS url() references are rewritten to the tag's prefix so fonts and images load from the CDN. build.sh gains --s3-bucket, --s3-prefix, --s3-sync-args, --no-s3.

edX S3 CDN (CLI). IBL_EDX.S3_CDN.ENABLE_S3_CDN (default false) points STATIC_URL at the CDN. CDN_DOMAIN defaults to assets.ibl.ai; ASSETS_PREFIX defaults to the edX image tag. Studio gets STATIC_URL plus studio/.

Course staff unenroll. POST /api/ibl/enrollment/unenroll/ and /unenroll/bulk/ now accept course staff, course instructors, and org staff/instructors. Course reruns require Studio write access on the source course.

Enrollment with history. POST /api/ibl/enrollment/enroll/ accepts is_active and created to carry an enrollment from another deployment with its original state and date. is_active: false creates the enrollment inactive. Enrollment refusals are reported with proper status codes (400/403/409) and errors.EnrollmentNotAllowed.

LTI 1.3 standalone launches. Lightweight standalone LTI launches for Agent blocks allow embedding agents in LTI consumers.

TLS trust store refresh. certifi 2026.10.19 on both pro-sumac and pro-olive. The olive image removes the distrusted root from the OS store.


iblai-lms-spa (0.95.0 → 0.100.1)

Native MFE pages. Micro-frontend pages are now natively built into the LMS SPA (revamped architecture).

Admin mode switch. Admins can toggle between User and Admin mode, with automatic assessment mode.

Help link. A Help link is available in the profile dropdown, pointing to IBL_SPA.LMS.HELP_CENTER_URL.

Agent embed. The sidebar agent embed always shows the close button.

edX-to-DM endpoints. LMS API calls that previously went to edX now route through the DM proxy.

Course about page. Non-enrolled users are redirected correctly to the course about page.


iblai-auth-spa (2.8.1 → 2.9.0)

User metadata forwarding. The auth flow now forwards trimmed user_metadata to localStorage so the SDK and apps can read it without an extra API call. The SDK reads the current user's metadata from localStorage directly.


ibl-cli (7.30.0 → 7.33.0)

Same-origin proxy fix. The /backend/<svc>/ proxy locations now clear X-Forwarded-Host, so behind a load balancer backends build absolute URLs from the API host instead of the SPA host.

edX S3 CDN plugin. ibl-edx-s3-cdn plugin and the IBL_EDX.S3_CDN.* settings. See the edX section above.

LMS help center link. IBL_SPA.LMS.HELP_CENTER_URL (default https://docs.<BASE_DOMAIN>), rendered into .env.lms as NEXT_PUBLIC_HELP_CENTER_URL.

TLS trust store refresh. certifi 2026.10.19.


@iblai/web-containers (1.44.3 → 1.59.1)

Reopen last conversation. A new "Reopen last conversation" setting opens the user's most recent chat when they click an agent, instead of starting fresh.

User Models dialog. The in-chat model change moved to the LLM tab. Users pick from a User Models dialog with a multi-select mode. The automatic-model warning is shown on the card.

Chat download. Text and Excel export in the download dialog; the sidebar offers whole-chat export. Download links stay alive long enough for Safari.

Admin-visibility confirmation. A note and confirmation dialog appear when narrowing "Who Can View?" to administrators.

Code approvals. Code approval actions appear in the composer and on chat cards, with a phone-friendly tool-row layout.

Context Limits. A new Capabilities section with number fields for agent context limits.

Allowed File Types. File Uploads in Capabilities settings with an Allowed File Types dialog. Files outside the allowed types are refused with a toast and a link to the allowed-types list.

MCP server connection. Users can connect MCP servers directly from the chat composer.

Onboarding. The onboarding flow asks only what is missing, and the upgrade checkout URL is streamlined.

Explore Agents scroll toggle. Clicking Explore Agents while already in view scrolls back up.


@iblai/web-utils (2.9.4 → 2.18.0)

Multi-tenant auto-switch. A two-tenant user is automatically switched to their own tenant when the embedded tab is on the wrong one.

File type allow-list. Helpers to check file extensions against the agent's allowed types, and the file_error chat frame is handled.

Shareable link token. The share link is sent as shareable_link_token alongside the user's own token, and masked in logged websocket payloads.

RBAC permissions. The RBAC permissions call no longer blocks the UI; it loads asynchronously.

Tenant metadata from platforms list. The TenantProvider reads metadata from the platform list response, eliminating the separate metadata fetch.

Per-tab auth. Auth storage is wired to per-tab storage for Mentor AI (flag off by default).


@iblai/data-layer (1.30.3 → 1.38.1)

User platforms query. A new useUserPlatformsQuery hook for the DM platform list endpoint.

LLM access endpoints. LLM access status and set endpoints for the User Models dialog.

Latest conversation lookup. API to look up an agent's latest conversation for the reopen feature.

File upload URL refusal. The upload-URL endpoint returns a refusal object instead of throwing, supporting the allowed file types flow.

Readable CSV download. A combineCSVData utility for the readable CSV export.


@iblai/mcp (1.31.0 → 1.37.1)

SDK surface. This package aggregates the MCP UI hooks used by web-containers for server listings, connections, preferences, and the chat-composer MCP integration. It tracks the API changes from the DM's MCP phases and the shareable_link_token support.


@iblai/agent-ai (2.13.1 → 2.13.3)

Iframe sandbox downloads. The embed iframe sandbox now includes allow-downloads, so chat file downloads work inside the launcher.

closeEmbed relay. The closeEmbed message relay no longer loops when the launcher runs on a top-level host.


@iblai/iblai-js (2.40.6 → 2.59.1)

Aggregation package. iblai-js bundles web-containers, web-utils, data-layer, mcp, and agent-ai into one importable SDK. All features listed in those packages' sections above are included. Tailwind scanning works with the per-module ESM tree.