Fix: /api/context route in main thread - #17
Closed
rcasaleiro wants to merge 2 commits into
Closed
Conversation
…tegration Merge integration : editor-window screenshot tool + welcome window rework (v2.32.0)
The /api/context and /api/context/{category} endpoints were handled inline
on the HTTP listener's ThreadPool worker thread. GetContextResponse reads
MCPSettingsManager.ContextEnabled / ContextPath, which call EditorPrefs —
a main-thread-only API. Every request threw "GetBool can only be called
from the main thread" and the bridge returned HTTP 500, so
unity_get_project_context never worked even with valid context files.
Marshal both routes through ExecuteOnMainThread (already used by the legacy
synchronous path), which short-circuits when already on the main thread.
Contributor
|
Thanks @rcasaleiro — spot-on root cause. The Closing as resolved by the forward-port. 🙏 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
unity_get_project_contextalways fails with HTTP 500, so the Project Contextfeature never returns anything.
Cause
The bridge handles every request on a background ThreadPool thread:
The
/api/contextroutes callGetContextResponse()directly on that thread, and itreads
EditorPrefs(ContextEnabled/ContextPath) — a main-thread-only Unity API.So every request throws and returns 500:
Fix
Run the two context routes through
ExecuteOnMainThread(...)— the same helper everyother synchronous route already uses. One-file change; no other endpoints affected.
Testing
Tested locally with a new project with only three docs in under
Assets/MCP/Context/:unity_get_project_contextreturned 500 beforethe change and returns the full content after, for both the all-categories and
single-category calls.