Skip to content

Commit cd4f21a

Browse files
committed
Fix issue preventing to execute synchronous tools
1 parent 61c552e commit cd4f21a

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

Editor/UnityBridge/McpUnitySocketHandler.cs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,11 @@ protected override async void OnMessage(MessageEventArgs e)
6666
}
6767
else if (_server.TryGetTool(method, out var tool))
6868
{
69-
// Execute the tool based on its IsAsync flag
70-
if (tool.IsAsync)
71-
{
72-
responseJson = await ExecuteToolAsync(tool, parameters);
73-
}
74-
else
75-
{
76-
responseJson = tool.Execute(parameters);
77-
}
69+
responseJson = await ExecuteTool(tool, parameters);
7870
}
7971
else if (_server.TryGetResource(method, out var resource))
8072
{
81-
// Fetch the resource
82-
responseJson = FetchResource(resource, parameters);
73+
responseJson = await FetchResource(resource, parameters);
8374
}
8475
else
8576
{
@@ -127,7 +118,7 @@ protected override void OnError(ErrorEventArgs e)
127118
/// <summary>
128119
/// Execute a tool with the provided parameters
129120
/// </summary>
130-
private async Task<JObject> ExecuteToolAsync(McpToolBase tool, JObject parameters)
121+
private async Task<JObject> ExecuteTool(McpToolBase tool, JObject parameters)
131122
{
132123
// We need to dispatch to Unity's main thread
133124
var tcs = new TaskCompletionSource<JObject>();
@@ -136,7 +127,15 @@ private async Task<JObject> ExecuteToolAsync(McpToolBase tool, JObject parameter
136127
{
137128
try
138129
{
139-
tool.ExecuteAsync(parameters, tcs);
130+
if (tool.IsAsync)
131+
{
132+
tool.ExecuteAsync(parameters, tcs);
133+
}
134+
else
135+
{
136+
var result = tool.Execute(parameters);
137+
tcs.SetResult(result);
138+
}
140139
}
141140
catch (Exception ex)
142141
{
@@ -155,7 +154,7 @@ private async Task<JObject> ExecuteToolAsync(McpToolBase tool, JObject parameter
155154
/// <summary>
156155
/// Fetch a resource with the provided parameters
157156
/// </summary>
158-
private JObject FetchResource(McpResourceBase resource, JObject parameters)
157+
private async Task<JObject> FetchResource(McpResourceBase resource, JObject parameters)
159158
{
160159
// We need to dispatch to Unity's main thread and wait for completion
161160
var tcs = new TaskCompletionSource<JObject>();
@@ -178,7 +177,7 @@ private JObject FetchResource(McpResourceBase resource, JObject parameters)
178177
};
179178

180179
// Wait for the task to complete
181-
return tcs.Task.GetAwaiter().GetResult();
180+
return await tcs.Task;
182181
}
183182

184183
/// <summary>

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,9 @@ Don't forget to shutdown the server with `Ctrl + C` before closing the terminal
304304

305305
If you have any questions or need support, please open an [issue](https://github.com/CoderGamester/mcp-unity/issues) on this repository.
306306

307-
Alternative you can reach out on [![](https://img.shields.io/badge/LinkedIn-0077B5?style=flat&logo=linkedin&logoColor=white 'LinkedIn')](https://www.linkedin.com/in/miguel-tomas/)
307+
Alternative you can reach out on:
308+
- [![](https://img.shields.io/badge/LinkedIn-0077B5?style=flat&logo=linkedin&logoColor=white 'LinkedIn')](https://www.linkedin.com/in/miguel-tomas/)
309+
- Discord: gamester7178
308310

309311
## Contributing
310312

0 commit comments

Comments
 (0)