We’re excited to announce the v0.17.0 release of the Obot MCP Platform. This release introduces a powerful new agent experience for users, enhances OAuth and token visibility, and delivers major improvements across deployment workflows, high-availability support, and overall UI polish.
Big Updates
Obot Agent (Beta)
This release introduces the new Obot Agent experience in beta.
Every user now gets their own agent backed by a cloud-based computer with full agentic capabilities, deeply integrated with Obot’s MCP gateway. With Obot Agents, users can build and run reproducible agentic workflows or perform ad hoc agentic work as needed.
Meanwhile, IT administrators retain full control. Agents run in controlled sandboxes and interact with external systems exclusively through Obot-managed LLM connections and MCP servers — with governance, RBAC, and auditing built in.
Important: Obot Agent replaces the existing Obot Chat experience. Obot Chat is now deprecated and will be fully removed in a future release. This is a breaking change.
As of v0.17.0, Obot Chat is disabled by default. To re-enable it, set the OBOT_SERVER_DISABLE_LEGACY_CHAT environment variable to false.
There is no migration path from Obot Chat to Obot Agent.
Static OAuth for Remote MCP Servers
Remote MCP catalog entries can now be configured with static OAuth credentials. The OAuth authorization URL is surfaced directly in the “connect to server” flow, simplifying external integrations and improving enterprise compatibility.
This enables connectivity to remote MCP servers that do not support Dynamic Client Registration (DCR) or Client ID Metadata Documents (CIMD). Administrators can configure static credentials once in Obot, allowing downstream clients that require DCR or CIMD to successfully connect via Obot.
LLM Token Usage Visibility
A new Admin Token Usage page provides visibility into LLM token consumption across the platform.
Usage is derived directly from token counts returned by upstream LLM providers and can be broken down by:
- Model
- Provider
- Token type (input/output)
- User
This provides better insight into model usage patterns and cost management.
Kubernetes RuntimeClass Support
You can now configure the Kubernetes RuntimeClass used for MCP servers deployed by Obot.
We are using this capability in our own environments to run Obot Agents inside hardened GKE gVisor sandboxes, enabling stronger workload isolation for security-sensitive deployments.
Additional Improvements
- Enhanced deployment logs UI with expandable views and direct catalog entry linking
- Expanded audit log access for Power User Plus users and scoped access for Basic users
- Improved retry handling, loading states, and error recovery across the UI
- Increased observability for Basic users
- Rate limiting configuration documentation and environment variable support
- Improvements to LLM proxy streaming and token parsing reliability
Upgrade Notes
First and foremost: Obot Chat is now deprecated. It is disabled by default in this release. When you upgrade, it will be gone and the Obot Agent feature will be enabled. You can reenable the legacy Obot Chat by setting OBOT_SERVER_DISABLE_LEGACY_CHAT environment variable to false.
This is breaking change and your previous Obot chats and projects will not be available.
Next, Obot Agent is an early Beta feature. We plan to iterate on it quickly, adding a lot of features and functionality. Expect it to have some rough edges right now and for it to evolve significantly as we receive feedback. Here are few specific things to be aware of:
- Obot Agent only works well with Anthropic models. We've only tuned and tested its prompts for the most recent releases of Sonnet and Opus. In the future, we'll release OpenAI tuned prompts. Feel free to try it with other models, but in our light testing, the latest OpenAI models didn't perform well with our prompts.
- Make sure you have default models set. If you've been using Obot Chat, you probably already do. Obot Agent will uses LLM and Fast LLM defaults and it does not fail gracefully if they are unset.
- It takes a minute or two for Obot Agent to be functional after startup. Various controllers and caches in Obot are starting up and again we don't yet fail gracefully when we're in this state.
- Every Obot agent gets a pod/container and a volume. If you're running with the Docker backend, this shouldn't be a big deal. If you're running with the Kubernetes backend, you need to have a StorageClass set if you want your agents to survive node restarts. You also need to plan for a pod and volume per user. We have plans to improve this in the future so that you don't need a StorageClass (beyond local storage).
Getting Started
docker run -d --name obot -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock --pull=always \
ghcr.io/obot-platform/obot:latestFor full documentation and configuration guidance, see:
What's Changed
- feat: add static OAuth for remote catalog entries by @g-linville in #5450
- docs: API keys: add examples by @g-linville in #5661
- enhance: add oauth url as part of connect to server process by @ivyjeong13 in #5647
- fix: static oauth: remove authorization server URL by @g-linville in #5674
- chore: support configuring PSA by @drpebcak in #5650
- feat: re-introduce explicit tool call approval by @njhale in #5669
- enhance: increase server observability for Basic users by @g-linville in #5681
- fix: API Keys page related bugs by @ivyjeong13 in #5659
- docs: add static oauth docs by @g-linville in #5658
- fix: clickoutside without clickoutside action & consistency/cleanup of dialogs by @ivyjeong13 in #5591
- chore: support setting existing runtimeClass for mcp server pods by @drpebcak in #5684
- fix: clears copied status on open close by @ryu-man in #5651
- chore: document using runtimeClass with obot by @drpebcak in #5693
- enhance: allow basic users to view audit logs for their own servers by @g-linville in #5692
- fix: stop using supplied port for shim container in Docker by @thedadams in #5705
- fix: chat tool approvals for ha deployments by @njhale in #5712
- enhance: chat thread mcp server tool approval and fix bundle by @njhale in #5702
- fix: delete OAuth tokens when they are no longer valid by @g-linville in #5708
- fix: dialogs not updated with new dialog structure by @ivyjeong13 in #5709
- chore: bump nanobot image version by @thedadams in #5718
- fix: disable builtin agents in nanobot containers by @thedadams in #5727
- feat: add integrated Obot MCP server by @g-linville in #5714
- chore: bump nanobot image to v0.0.52 by @g-linville in #5733
- enhance: integrated MCP server: make various improvements by @g-linville in #5734
- chore: remove existing integration tests and gh workflow by @njhale in #5731
- fix: emit tool confirm events via shared storage for HA support by @njhale in #5728
- fix: integrated MCP server: enable stateless mode by @g-linville in #5737
- feat: add nanobot agent integration by @thedadams in #5732
- enhance: improve search tool in integrated MCP server by @g-linville in #5742
- fix: integrated MCP server: show correct status for MCPServers by @g-linville in #5740
- fix: distinguish between project version in authorizer by @thedadams in #5743
- chore: add robots.txt by @drpebcak in #5739
- fix: remove duplicate crawled content from versioned docs by @drpebcak in #5738
- fix: give basic users access to list v2 projects by @thedadams in #5744
- fix: expose update in ui and handle state by @drpebcak in #5725
- feat: nanobot UI workflows into obot by @ivyjeong13 in #5741
- fix: correctly reprocess agents before their tokesn expire by @thedadams in #5750
- Image updates by @thedadams in #5748
- fix: nanobot ui/ux updates by @ivyjeong13 in #5753
- fix: nanobot file resource path by @ivyjeong13 in #5760
- fix: dialog-container css fix by @ivyjeong13 in #5720
- chore: pin phat image on release by @drpebcak in #5759
- fix: fix nanobot chat ui's unreliable scrollToBottom by @ivyjeong13 in #5764
- Fix: Re-enable images-bundle by @cjellick in #5771
- fix: expose the MCP server connect URLs with internal IPs to nanobot by @thedadams in #5775
- fix: improve loading state handling in DeploymentsView component by @ryu-man in #5719
- better reconciliation for k8sSettings by @drpebcak in #5766
- fix: improve tab styling for horizontal scrolling by @ryu-man in #5752
- fix: ui: clean up issues around static OAuth by @g-linville in #5776
- enhance: nanobot chat ui tweaks & fixed thread quick access by @ivyjeong13 in #5777
- feat: add structured question UI for nanobot elicitations by @njhale in #5782
- feat: admin Token Usage page by @ivyjeong13 in #5781
- chore: add json-ld schema markup to docs by @drpebcak in #5778
- feat: set up SystemMCPServer for obot-mcp-server by @g-linville in #5780
- fix: redeploy nanobot agents when the search server URL changes by @thedadams in #5788
- fix: nanobot chat UI tweaks by @ivyjeong13 in #5789
- feat: make nanobot agents persistent by @thedadams in #5799
- fix: track token usage for Anthropic and OpenAI Responses API proxy endpoints by @cjellick in #5797
- chore: add retry handling for errors by @drpebcak in #5790
- enhance: fix PUP access to audit logs by @g-linville in #5706
- fix: remove unneeded check from llm tests by @thedadams in #5804
- chore: allow configuring runtimeClass for obot pods by @drpebcak in #5801
- fix: static oauth: delete user tokens when static client is deleted by @g-linville in #5803
- fix: nanobot chat ui updates continued by @ivyjeong13 in #5800
- feat: add link to view MCP catalog entry in DeploymentsView by @ryu-man in #5763
- chore: update suggested model versions by @drpebcak in #5811
- fix: recreate nanobot agents instead of rolling by @thedadams in #5830
- fix: add last-restart annotation for Kubernetes MCP pods by @thedadams in #5831
- fix: chat -- reset on event error to allow resubscribe by @ivyjeong13 in #5815
- fix: nanobot markdown editor styles being overridden by @ivyjeong13 in #5833
- fix: nanobot markdown editor resize up to 50dvw by @ivyjeong13 in #5834
- docs: add rate limit env vars to server configuration and helm values by @njhale in #5844
- chore: fix 404s in canonical urls, build out more structured data by @drpebcak in #5825
- docs: add rate limiting config to v0.16.0 docs by @njhale in #5845
- feat: enhance deployment logs UI and introduce expand/minimize feature by @ryu-man in #5758
- fix: bootstrap: add HashedProviderUserID by @g-linville in #5849
- enhance: add configuration for nanoobot agent image by @thedadams in #5842
- chore: add documentation for LLM token limit configuration by @thedadams in #5841
- chore: ui: port nanobot updates for compaction by @g-linville in #5851
- enhance: elicitation ui tweaks by @ivyjeong13 in #5838
- enhance: ui/ux nanobot chat/workflows enhancements by @ivyjeong13 in #5852
- fix: hide compaction summary by @ivyjeong13 in #5853
- chore: ensure content-type/x-content-type-options are set everywhere by @drpebcak in #5847
- Add documentaion for switching between auth providers by @sangee2004 in #5862
- fix: ensure all BreadcrumbList.itemListElement entries get an
itemurl by @drpebcak in #5863 - fix: ui/ux nanobot chat bugfixes & tweaks continued by @ivyjeong13 in #5864
- enhance: make nanobot agent configuration dynamic by @thedadams in #5870
- enhance: display file metadata in nanobot files table by @njhale in #5875
- fix: reduce redundant resources/list_agents/prompts calls to 1 each by @ivyjeong13 in #5882
- chore: add feature flag to disable legacy chat by @g-linville in #5879
- chore: use sdk default env vars to set these configs by @drpebcak in #5886
- chore: only apply Kubernetes changes if something has changed by @thedadams in #5885
- fix: nanobot chat configuring MCP UI styling and more fixes by @ivyjeong13 in #5881
- enhance: use default model aliases for dynamic nanobot config by @thedadams in #5895
- fix: column headers hasModifiedAt & hasCreatedAt check by @ivyjeong13 in #5888
- fix: delete and recreate container when restarting in Docker mode by @thedadams in #5894
- fix: use healthz check for nanobot agent servers by @thedadams in #5896
- chore: use autoexporter by @drpebcak in #5889
- fix: ensure entire LLM stream is copied by @thedadams in #5900
- enhance: toggle access nanobot legacy chat by @ivyjeong13 in #5899
- fix: store oauth pending requests separately from tokens by @g-linville in #5909
- fix: navigation tweaks w/ nanobot chat by @ivyjeong13 in #5908
- fix: hide legacy chat options if disableLegacyChat is set by @ivyjeong13 in #5920
- fix: thread created for root session, filter out from threads by @ivyjeong13 in #5914
- fix: ui: use proper paths when connecting to Nanobot by @g-linville in #5924
- fix: agent: set user for audit logs by @g-linville in #5927
- Pin nanobot version by @drpebcak in #5926
- chore: fix tags to work with versioned releases by @drpebcak in #5928
- fix: avoid gzip-encoded proxy bodies in LLM token parsing by @cjellick in #5930
- chore: bump gptscript to reduce noisy logs by @g-linville in #5937
- fix: correct secret trigger for nanobot cred sync by @cjellick in #5938
- enhance: file upload UX and resource link preview modal by @njhale in #5942
- fix: nanobot files decode encoded names and stabilize table sorting by @njhale in #5949
- chore: update deps by @drpebcak in #5950
- fix: update with session directories changes 2 by @ivyjeong13 in #5943
- fix: black bar when agent loading & missing Restart Agent link by @ivyjeong13 in #5954
- fix: ui: don't show files written to .nanobot by @g-linville in #5960
- fix: add upload btn in message input by @ivyjeong13 in #5959
- fix: fix race condition in nanobot agent launch: retry when NANOBOT_ENV_FILE credential is not yet provisioned by @g-linville in #5962
- fix: poll for thread title & hide session mcp related thread by @ivyjeong13 in #5964
- chore: bump nanobot images to v0.0.58 by @njhale in #5965
- fix: ui: show either structured or unstructured tool results; not both by @g-linville in #5966
- fix: mount nanobot config to /config instead of /run to avoid read-only filesystem crash by @njhale in #5969
- chore: overhaul docs for Obot Agent by @drpebcak in #5961
Full Changelog: v0.16.4...v0.17.0