| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
|
Hey! Your PR title Dynamic (lazy) mcp tool schema loading doesn't follow conventional commit format. Please update it to start with one of:
Where scope is the package name (e.g., app, desktop, opencode). See CONTRIBUTING.md for details. |
Sorry, something went wrong.
|
The following comment was made by an LLM, it may be inaccurate: No duplicate PRs found |
Sorry, something went wrong.
|
Thanks for your contribution! This PR doesn't have a linked issue. All PRs must reference an existing issue. Please:
See CONTRIBUTING.md for details. |
Sorry, something went wrong.
|
Closing this pull request because it has had no updates for more than 60 days. If you plan to continue working on it, feel free to reopen or open a new PR. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
What does this PR do?
Problem
When multiple MCP servers are enabled, all tool definitions load into the agent's context at session startup. A single MCP server like GitHub can add 15-20k+ tokens just for tool schemas. With several MCPs enabled, context bloat can exceed 50k tokens before the user even sends a message. This is even mentioned in the docs: https://opencode.ai/docs/mcp-servers/
Solution
Lazy loading pattern: Instead of loading full tool schemas at startup, we:
Example Flow
System prompt shows:
"playwright (20 tools): browser_snapshot, browser_click, browser_navigate, ..."
User: "Take a screenshot of google.com"
Agent calls: mcp_load_tools("playwright", ["browser_navigate", "browser_snapshot"])
→ Tools loaded into session state
Agent calls: playwright_browser_navigate({ url: "https://google.com" })
Agent calls: playwright_browser_snapshot()
Changes
File: config/config.ts
Changes: Add mcp_lazy_load to experimental options
────────────────────────────────────────
File: session/index.ts
Changes: Add mcpLoadedTools to Session.Info schema
────────────────────────────────────────
File: mcp/index.ts
Changes: Add index(), loadToolsForSession(), modify tools() and create()
────────────────────────────────────────
File: session/system.ts
Changes: Add mcpIndex() for system prompt generation
────────────────────────────────────────
File: session/prompt.ts
Changes: Include MCP index in system prompt, pass session state to MCP.tools()
────────────────────────────────────────
File: tool/mcp-load-tools.ts
Changes: New meta-tool implementation
────────────────────────────────────────
File: tool/registry.ts
Changes: Register meta-tool conditionally
How did you verify your code works?
Closes #8277