We're excited to announce the v0.27.0 release of the Obot Platform. This release adds experimental Claude Environments for running Claude sessions on your own Kubernetes infrastructure, OpenAPI-backed MCP servers, Okta SCIM provisioning, a localized UI, and tool search for vMCPs.
Big Updates
Claude Environments
Organizations can now run Claude cloud sessions on their own Kubernetes infrastructure. Users keep working in Claude, while Obot decides who can start a session, which vMCPs the session can use, where it can send network traffic, and how much CPU and memory it gets. Obot uses Agent Substrate to run isolated sessions and suspend idle workspaces. Claude Environments replaces the former Hosted Agents feature.
Administrators create an environment from a Claude environment key, then grant access through profiles that map users and groups to vMCPs, resource limits, and egress rules. Session traffic is limited to allowed hosts, and destination-specific secrets are injected at the egress gateway, so the session never sees them. Obot vMCP credentials are scoped to the mapped Obot user, and every egress request is recorded in Audit Logs. Administrators map Claude organization members to Obot users, and Claude Tag sessions started from Slack or GitHub run under a dedicated service identity. See the docs for cluster requirements and setup.
Important
Claude Environments is experimental and disabled by default. It uses new technology, requires Obot to run in Kubernetes, and needs additional cluster resources and configuration. It also requires a Claude Team or Enterprise organization with self-hosted environments enabled. See #8276 for details.
OpenAPI-Backed MCP Servers
Obot can now host an MCP server for any HTTP API that has an OpenAPI schema, without anyone writing a separate MCP server. Administrators import a schema from a URL or a file, and Obot pre-fills the name, description, API destination, and credential headers for review before saving. Each API operation becomes an MCP tool.
OpenAPI servers run on Docker or Kubernetes from a saved snapshot of the schema, and MCP egress policies apply to them. API keys and bearer tokens are forwarded on each request. OpenAPI entries are also supported in Git-backed catalogs, and existing servers keep their schema snapshot until they are explicitly upgraded. See the docs for details.
Note
OpenAPI-backed MCP servers support header API keys and pre-issued bearer tokens, but do not perform OAuth flows against the upstream API. OAuth declarations in a schema are imported but do not configure authentication. Schemas are limited to 1 MiB. See #8253 and #8250 for details.
Okta SCIM Provisioning
Okta can now provision users, groups, and group memberships into Obot through SCIM. Administrators decide in Okta which users and groups Obot can see, and Obot no longer needs read access to the Okta directory. Users still sign in through the existing Okta OIDC app.
Removing a user's assignment in Okta now deactivates them in Obot. They are signed out, and their API keys and other credentials stop working. When configuring the Okta auth provider, administrators choose between SCIM and the Okta API for group data. See the docs for setup.
Japanese, Korean, and Simplified Chinese UI
The Obot UI is now available in Japanese, Korean, and Simplified Chinese in addition to English. The language defaults to the browser's language and can be changed from the profile menu. Auth and model provider configuration text returned by the API is localized as well.
Tool Search for vMCPs
vMCPs have a new opt-in Tool search setting. When it is enabled, clients see two tools, search_tools and call_tool, instead of the full tool list, which keeps tool definitions out of the model's context when a vMCP has many tools. Obot recommends enabling it for vMCPs with more than 50 tools.
Tool search does not grant additional access. The same component, profile, and user selections determine which tools can be found and called, and each call is validated, authorized, and audited as the underlying tool. The setting is also supported in catalog YAML. See the docs for details.
Improvements
- Remote catalog entries can require a localhost OAuth callback, and users connect to them with
obot mcp login <url>. - Users can reauthenticate a single vMCP component without signing out of the others.
- The same MCP server can be added to a vMCP more than once, each with its own component name.
- The built-in credential filter can be configured from the UI.
- Catalog entries support
minObotVersionandmaxObotVersionto limit which Obot versions offer them. - Obot Sentry supports Kiro as a client.
- When the license service can't be reached, Obot keeps the last accepted license entitlements until the license expires instead of degrading.
Upgrade Notes
Obot Agent has been removed. Obot Agent has been disabled by default since v0.23.0 and is removed in this release. Claude Environments is the planned replacement. The OBOT_ENABLE_AGENTS setting and the User Impersonation role are removed with it, and containerized MCP servers redeploy once after the upgrade. See #8274 for details.
Hosted Agents has been removed. Hosted Agents was off by default and never left experimental status. It has been removed and replaced by Claude Environments, and its resources are cleaned up on upgrade. See #8275 for details.
MCP clients must connect through vMCPs. Direct connections to catalog entries, MCP servers, and server instances are now rejected. Connections that were migrated to vMCPs keep their existing URLs. See #8178 for details.
Several default catalog entries are deprecated. Legacy Slack is scheduled for removal on October 30, 2026. AntV Charts, Brave Search, Browserbase, Chroma Cloud, MarkItDown, Playwright, and MongoDB Atlas Management will also be removed, on dates not yet announced. Upgrade to at least v0.26.2 before these entries are removed so existing deployments are preserved. See #8269 for recommended replacements.
What's Changed
- chore: update dependabot packages in docs/ui by @ivyjeong13 in #8131
- fix: mcp server remote form placeholder fix by @ivyjeong13 in #8137
- fix: confirmation settings save and vmcps tools fix by @ivyjeong13 in #8132
- fix: accept scoped token audience for CIMD OAuth clients by @calvinmclean in #8138
- Doc refactor by @cloudnautique in #8134
- chore(deps): bump the npm_and_yarn group across 1 directory with 5 updates by @dependabot[bot] in #8149
- fix: move force single-user into advanced & hide option on remote mcp servers by @ivyjeong13 in #8150
- chore: docs/ui dependencies package bumps & overrides by @ivyjeong13 in #8151
- feat: add SCIM support for Okta by @g-linville in #8085
- chore: bump mmmcp to pickup listing fix by @thedadams in #8152
- feat(openapi): add schema import and configuration types by @calvinmclean in #8062
- chore: fix login timeout for SCIM logins by @g-linville in #8155
- fix: correctly migrate static configuration by @thedadams in #8167
- fix(mcp): send required OAuth initialization probe headers by @calvinmclean in #8165
- fix: restore MCP server OAuth APIs used by tools and troubleshooting by @thedadams in #8168
- docs: add a threat model and tighten the vulnerability reporting policy by @cjellick in #8161
- docs: center vNext onboarding on vMCPs by @cloudnautique in #8170
- feat(ui): internationalize the UI with Japanese, Korean, and Simplified Chinese by @cjellick in #8141
- fix: reject protected resource metadata for a different origin by @cjellick in #8158
- Add credential filter by @cloudnautique in #8054
- chore: remove unused allowedTools field by @thedadams in #8184
- fix: list tools for shared vMCP component servers by @thedadams in #8177
- fix: show user disabled status and better SCIM wording by @g-linville in #8185
- fix: record secret binding status instead of reading Secrets by @thedadams in #8187
- fix: ignore repoURL, entryKey, and toolPreview in vMCP drift by @thedadams in #8198
- chore: bump golangci-lint version by @thedadams in #8201
- fix(mcp): request consent for Google OAuth reauthorization by @calvinmclean in #8190
- Remove Obot Agent by @thedadams in #8199
- chore: add docs and ADR for Okta SCIM by @g-linville in #8193
- fix: don't forward loopback host headers to MCP servers by @zmiievskyi in #8128
- fix: ui: show auth provider configuration errors inside the dialog by @g-linville in #8207
- fix: clear the session when the auth provider rejects a token refresh by @g-linville in #8200
- docs: update platform architecture diagram by @cjellick in #8212
- enhance: support Kiro as an Obot Sentry client by @cjellick in #8098
- fix(ui): stop clipping the group search focus ring by @cjellick in #8210
- fix(ui): list only catalog entries and vMCPs in the server picker by @cjellick in #8215
- docs: don't auto-close issues from pull requests by @cjellick in #8220
- fix: show vMCP updates for migrated connections on older versions by @thedadams in #8208
- fix: restrict MCP connections and OAuth to vMCPs by @thedadams in #8205
- fix: fetch Okta display names before SCIM is enforced by @g-linville in #8209
- fix: copy init files into Docker init containers as an archive by @cjellick in #8218
- fix: return to flow after static oauth config for a component vmcp by @ivyjeong13 in #8136
- feat(mcp): deploy OpenAPI servers with Docker and Kubernetes by @calvinmclean in #8163
- fix: reject control characters in redirect paths and warn that URL templates are not secret by @cjellick in #8219
- fix: docs: clarify SCIM Activity by @g-linville in #8225
- fix: don't count running MCP servers against capacity check by @cjellick in #8203
- fix: resolve allowlist paths with URL semantics before prefix matching by @cjellick in #8217
- docs: open pull requests from forks, not branches on the main repo by @cjellick in #8233
- docs: add inspector docs by @g-linville in #8230
- fix(mcptester): preserve optional tool parameters in Responses requests by @calvinmclean in #8234
- fix: block transition and unspecified addresses in egress checks by @cjellick in #8216
- chore: remove MCP server catalog drift detection by @thedadams in #8236
- docs: add a run-obot skill for launching and driving Obot locally by @cjellick in #8239
- fix(ui): generate MCP Tester forms for multi-type union params by @cjellick in #8238
- fix(ui): force GC after each browser test file to stop CI OOMs by @cjellick in #8240
- fix: vmcp component configuration creation/addition flow by @ivyjeong13 in #8189
- feat: add support for Claude Environments with Agent Substrate by @thedadams in #8237
- chore: ui: clarify 'account not active' message by @g-linville in #8245
- fix: route OAuth requests for remote MCP servers through the egress-checked client by @cjellick in #8242
- feat: support minimum and maximum Obot versions on catalog entries by @cjellick in #8173
- fix(mcp): recover valid tester tools and improve error details by @calvinmclean in #8251
- fix: correct Claude environment web egress policies by @thedadams in #8262
- fix(auth): let the change-password page load in dev mode by @cjellick in #8263
- fix: apply MCP server affinity to deployments that have none by @cjellick in #8259
- enhance: ui: add SCIM toggle to auth provider setup by @g-linville in #8241
- fix(ui): show MCP tester tool details for schemas with object or array defaults by @cjellick in #8257
- fix(ui): correct Japanese mistranslations by @Sriver535 in #8266
- enhance: ux allow same mcp servers in vmcps by @ivyjeong13 in #8206
- fix: fail open when Keygen can't be reached by @njhale in #8247
- feat: reauthenticate individual vMCP components by @thedadams in #8254
- fix(vmcp): allow administrators to configure secret bindings by @thedadams in #8256
- fix: set substrate node selectors and tolerations via config by @thedadams in #8280
- chore: bump default obot-sentry to v0.1.8 by @njhale in #8278
- fix: various vmcps related bugfixes by @ivyjeong13 in #8264
- feat(openapi): add catalog sync and schema import APIs by @calvinmclean in #8226
- feat(openapi): add catalog configuration UI by @calvinmclean in #8227
- feat(vmcp): add tool search support by @calvinmclean in #8243
- fix(claude): configure vMCPs only on environment profiles by @thedadams in #8286
- chore(deps): update mmmcp to v0.2.0 by @calvinmclean in #8287
- fix(migration): restore admin access to migrated vMCPs by @thedadams in #8285
- Setup and proxy localhost oauth redirects back to Obot by @cloudnautique in #8010
- fix: wait for instance configured on test vmcp launch before navigating by @ivyjeong13 in #8265
- enhance: claude environments ui/ux update by @ivyjeong13 in #8283
- fix(openapi): improve credential configuration and schema imports by @calvinmclean in #8284
- fix(storage): serialize storage table setup across replicas by @cjellick in #8297
- fix: repair broken docs links in the UI by @g-linville in #8301
- enhance: auth model provider localization by @ivyjeong13 in #8202
- docs: use non-resolvable placeholder package names in egress examples by @cjellick in #8303
- fix: migrate only connected legacy MCP catalog entries by @thedadams in #8299
- ci: skip Go lint and tests for docs-only pull requests by @cjellick in #8304
- docs: improve OpenAPI and tool search guides by @calvinmclean in #8295
- docs: rework licensing docs and document network requirements by @cjellick in #8292
- fix: stop falling back to saved licenses indefinitely by @njhale in #8306
- fix: default mcp icon and table sort/filters alignment vmcps fix by @ivyjeong13 in #8294
- fix: drop experimental and change to beta for Environments by @ivyjeong13 in #8308
- fix(mcp): update OpenAPI image to v0.27.2 by @calvinmclean in #8309
- fix: openapi mcp server ux/ui adjustments by @ivyjeong13 in #8300
- minor docs/getting started update and clean up by @cloudnautique in #8313
- fix: drop the 3-day limit on the offline license fallback by @njhale in #8315
- fix: don't send traffic to model-proxy when model provider is enabled by @g-linville in #8317
- fix: show directory setttings in auth provider config by @g-linville in #8312
- chore: switch MCP Tester to gpt-6-luna by @g-linville in #8318
- fix(oauth): recover interrupted refresh-token rotations by @thedadams in #8316
- fix: add reauthenticate opt in vmcp connect dialog by @ivyjeong13 in #8320
- fix: move enforcement events by @ivyjeong13 in #8325
- fix: stop compiling claude runner on Windows by @thedadams in #8329
- fix(ui): fix user search and make Claude Tag users read-only by @njhale in #8332
- UX updates for Claude Environments by @thedadams in #8333
- enhance: update environments audit logs and clone option by @ivyjeong13 in #8327
- chore: release v0.27 docs by @cjellick in #8335
New Contributors
- @Sriver535 made their first contribution in #8266
Full Changelog: v0.26.2...v0.27.0