cd /news/ai-agents/goose-implements-deferred-mcp-tool-s… · home › topics › ai-agents › article
[ARTICLE · art-166814] src=forkast.news ↗ pub= topic=ai-agents verified=true sentiment=· neutral

Goose Implements Deferred MCP Tool Schema Loading

Goose merged PR #13378, adding an opt-in deferred loading strategy for Model Context Protocol (MCP) tool schemas: when GOOSE_TOOL_DEFERRAL=lookup is set, Goose lists MCP tool names in the system prompt instead of their schemas, and the model must call enable_tools with exact names to make those schemas available on the next response. The default remains eager loading, and selected tools can stay eager via the comma-separated GOOSE_TOOL_DEFERRAL_ALWAYS_LOAD list; enable_tools validates names against model-visible MCP tools and fails the whole request if any name is unknown or app-only. The PR notes that test and clippy commands were run on an earlier implementation but not rerun after the final global-settings and eager-override revision, and it establishes no measured token savings or performance gain.

by read3 min views1 publishedNov 10, 2026
Goose Implements Deferred MCP Tool Schema Loading
Image: Forkast (auto-discovered)

Goose has integrated a new mechanism for handling Model Context Protocol (MCP) tools, targeting how their schemas are presented to the model. The implementation, detailed in Goose PR #13378, adds a deferred strategy. This story concerns the merged Goose code change; it does not establish a separate tagged product release or a change to the MCP protocol itself.

By default, Goose keeps its existing eager behavior, where tool schemas are provided to the model. Deferral is opt-in. When GOOSE_TOOL_DEFERRAL=lookup is set, Goose lists available MCP tool names in the system prompt rather than providing their schemas immediately. The model can call enable_tools with exact tool names; the selected schemas become available on the next response. The merged implementation validates those names against model-visible MCP tools. If any requested name is unknown or app-only, the enable request fails as a whole. Lookup is the only implemented strategy; the PR does not add search or wildcard matching.

For builders, this creates an explicit selection step between seeing a tool’s name and seeing its schema. That can matter when designing an agent workflow: a tool not enabled is not among the schemas the model can use for its next response. But this is a change in schema availability, not a new authorization layer. Calling enable_tools does not execute a tool or grant permission to run it. The enable call uses Goose’s existing permissions, hooks and result-recording path, and a later tool execution still requires ordinary permissions. Knowing how to call a tool and being allowed to call it remain separate conditions. The configuration also permits selected MCP tools to remain eager through GOOSE_TOOL_DEFERRAL_ALWAYS_LOAD, a comma-separated list of exact model-visible names. Entries may include extension prefixes; surrounding whitespace is trimmed. These exceptions matter only with deferral enabled and do not bypass availability or visibility checks. Platform tools stay eager, while code mode keeps its own catalog. If the setting is unset, the existing eager behavior remains; the new workflow does not silently become the default.

Enabled names are recovered from successful, paired enable-tool requests and responses in conversation history. The lifecycle test exercises enabling, reconstruction and compaction, then checks that /clear removes the enabled state. The PR includes an eager-override test scenario that verifies an always-loaded MCP tool can execute, another MCP tool remains deferred, and an app-only tool remains hidden. For an agent that resumes from history, the enable state follows persisted conversation results; clearing that history requires the model to enable a tool again if it is needed.

There is a specific validation caveat. The PR notes that test and clippy commands were run on an earlier implementation, but were not rerun after the final global-settings and eager-override revision. Formatting and diff checks did pass after those changes. The final revision therefore lacks those post-change test and clippy reruns. No measured token savings, performance gain, adoption or broad rollout is established by the PR, and none is needed to describe the implementation.

The practical significance is narrow but consequential for workflow design: Goose can make schema exposure an explicit, exact-name step while leaving permission enforcement where it was. Builders evaluating the change should keep those two layers distinct and account for the extra selection step, rather than treating deferred schemas as either an execution capability or evidence of a measured efficiency improvement.

── more in #ai-agents 4 stories · sorted by recency
── more on @goose 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/goose-implements-def…] indexed:0 read:3min 2026-11-10 · —