What happened?
With Tool selection = Auto, my custom agent discovers and loads MCP tools successfully, but then cannot call them during the same turn.
The tool trace shows inconsistent states:
capabilities_loadreports that a tool is loaded and callable.- A subsequent
capabilities_discoverstill says that the same tool must be loaded first. - Loading it again returns “already loaded and callable.”
- The agent repeats discovery/loading and eventually stops without making the actual MCP calls.
In one affected conversation, sending a follow-up message allowed the previously loaded Microsoft Learn tools to work. Switching to Manual and explicitly listing the tools also allowed real MCP calls on the first turn.
Auto mode continued failing when tested again, including after terminating and relaunching Osaurus.
What did you expect to happen?
After capabilities_load succeeds, the loaded tools should be available to the model on its next step within the same turn, without another user message or switching to Manual.
This seems particularly relevant to the 0.1.6 release notes, which describe loading MCP/plugin tool definitions on demand in Auto mode to reduce token usage.
Steps to reproduce
- Configure a custom agent with tools enabled, Tool selection = Auto, and a connected Microsoft Learn MCP server:
https://learn.microsoft.com/api/mcp - Start a new conversation and request read-only tests of the configured MCP servers. For Microsoft Learn, ask it to search for official .NET
CancellationTokendocumentation and fetch one result. Require actual MCP calls rather than shell or web-search substitutes. - Observe successful
capabilities_loadresults, followed by repeated discovery/loading and no actual MCP execution. - In the affected conversation, send a follow-up asking it to continue using the Microsoft Learn tools already loaded. In my observed case, search and fetch then succeeded.
- As a comparison, change the agent to Manual, explicitly include the relevant tools, and repeat the task in a new conversation. Microsoft Learn search/fetch and Burp’s read-only project-options call worked immediately.
The Microsoft Learn tool names in my installation are:
microsoft-learn_microsoft_docs_search
microsoft-learn_microsoft_docs_fetch
Privacy Filter remained enabled during the successful Manual test. I have not isolated every possible privacy-filter interaction.
Environment
- Osaurus version: Windows Beta 0.1.6.0, Microsoft Store, x64
- Windows: Windows 11 Pro Insider Preview, 26H2, build 26340.9616
- CPU / GPU / RAM: Intel Core Ultra 9 185H / Intel Arc integrated graphics / 32 GB
- Model shown in chat:
gpt-6-sol, through the ChatGPT/Codex connection - Agent: Custom agent, Osaurus-RE-Lab
- Execution environment: Sandbox enabled; no workspace folder attached
- MCP used for the clearest comparison: Microsoft Learn over HTTP
Logs / screenshots
The expanded tool trace shows:
- Successful loading of Microsoft Learn search/fetch schemas.
- Discovery subsequently describing those tools as requiring loading.
- A repeated load reporting that they are already loaded and callable.
- The agent stopping without actual MCP execution.
- Successful search/fetch after a follow-up message in the same conversation.
- Successful first-turn MCP execution in Manual mode.
For the successful follow-up, the UI recorded approximately 826 ms for search and 409 ms for fetch. The returned page was “Cancellation in Managed Threads.”
Additional technical evidence: static inspection of the installed assembly
I inspected Osaurus.ServerHosting.dll from the installed 0.1.6.0 package using ILSpy. The following appears consistent with the observed behavior:
CapabilityLoader.LoadTool/LoadGrouprecord loaded tool names throughAgentPromptSessionStore.RecordLoaded.CapabilityLoader.LoadreturnsToolOutcome.Ok(...)without settingInvalidatesRoster.AgentToolLoop.ExecuteCallAsyncreturns that capability outcome directly.- The loop refreshes its tool surface when
InvalidatesRostercausesrosterStaleto become true. ComposeRunSurfaceincorporatesLoadedToolswhen constructing the tool list.
Possible cause: newly loaded tools are recorded in session state, but the active turn’s tool definitions and discovery scope are not refreshed. The next user turn reconstructs the surface and makes them available.
This is a static-analysis hypothesis supported by the UI trace; I have not captured the outbound provider requests or compared the 0.1.5 binary.
Assembly SHA-256:
E9BE25DDACDDF7A5F03166AFD6C72EBB0A8178219526A930AF6D820E263F0D18