Skip to content

Stack overflow. error #490

Closed
Closed
@LiuYuLu

Description

@LiuYuLu

Describe the bug
When tool is called, both the first and second times are normal, and when the third time, a stack overflow occurs

To Reproduce
Steps to reproduce the behavior:

  1. Reuse the original business logic

Expected behavior

Logs

error log

Stack overflow.
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at DynamicClass.ResolveService(ILEmitResolverBuilderRuntimeContext, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at DynamicClass.ResolveService(ILEmitResolverBuilderRuntimeContext, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(System.Type)
   at Microsoft.Extensions.DependencyInjection.ActivatorUtilities+ConstructorInfoEx.GetService(System.IServiceProvider, Int32)
   at Microsoft.Extensions.DependencyInjection.ActivatorUtilities+ConstructorMatcher.CreateInstance(System.IServiceProvider)
   at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance(System.IServiceProvider, System.Type, System.Object[])
   at Microsoft.Extensions.DependencyInjection.McpServerBuilderExtensions.CreateTarget(System.IServiceProvider, System.Type)
   at Microsoft.Extensions.DependencyInjection.McpServerBuilderExtensions+<>c__DisplayClass3_1.<WithTools>b__2(ModelContextProtocol.Server.RequestContext`1<ModelContextProtocol.Protocol.CallToolRequestParams>)
   at ModelContextProtocol.Server.AIFunctionMcpServerTool+<>c__DisplayClass2_0.<Create>b__0(Microsoft.Extensions.AI.AIFunctionArguments)
   at Microsoft.Extensions.AI.AIFunctionFactory+ReflectionAIFunction+<InvokeCoreAsync>d__26.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Microsoft.Extensions.AI.AIFunctionFactory+ReflectionAIFunction+<InvokeCoreAsync>d__26, Microsoft.Extensions.AI.Abstractions, Version=9.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]](<InvokeCoreAsync>d__26 ByRef)
   at System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Start[[Microsoft.Extensions.AI.AIFunctionFactory+ReflectionAIFunction+<InvokeCoreAsync>d__26, Microsoft.Extensions.AI.Abstractions, Version=9.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]](<InvokeCoreAsync>d__26 ByRef)
   at Microsoft.Extensions.AI.AIFunctionFactory+ReflectionAIFunction.InvokeCoreAsync(Microsoft.Extensions.AI.AIFunctionArguments, System.Threading.CancellationToken)
   at Microsoft.Extensions.AI.AIFunction.InvokeAsync(Microsoft.Extensions.AI.AIFunctionArguments, System.Threading.CancellationToken)
   at ModelContextProtocol.Server.AIFunctionMcpServerTool+<InvokeAsync>d__14.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[ModelContextProtocol.Server.AIFunctionMcpServerTool+<InvokeAsync>d__14, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]](<InvokeAsync>d__14 ByRef)
   at System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Start[[ModelContextProtocol.Server.AIFunctionMcpServerTool+<InvokeAsync>d__14, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]](<InvokeAsync>d__14 ByRef)
   at ModelContextProtocol.Server.AIFunctionMcpServerTool.InvokeAsync(ModelContextProtocol.Server.RequestContext`1<ModelContextProtocol.Protocol.CallToolRequestParams>, System.Threading.CancellationToken)
   at ModelContextProtocol.Server.McpServer+<>c__DisplayClass40_0.<ConfigureTools>b__3(ModelContextProtocol.Server.RequestContext`1<ModelContextProtocol.Protocol.CallToolRequestParams>, System.Threading.CancellationToken)
   at ModelContextProtocol.Server.McpServer.InvokeHandlerAsync[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Func`3<ModelContextProtocol.Server.RequestContext`1<System.__Canon>,System.Threading.CancellationToken,System.Threading.Tasks.ValueTask`1<System.__Canon>>, System.__Canon, ModelContextProtocol.Protocol.ITransport, System.Threading.CancellationToken)
   at ModelContextProtocol.Server.McpServer+<>c__DisplayClass43_0`2[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<SetHandler>b__0(System.__Canon, ModelContextProtocol.Protocol.ITransport, System.Threading.CancellationToken)
   at ModelContextProtocol.RequestHandlers+<>c__DisplayClass0_0`2+<<Set>b__0>d[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[ModelContextProtocol.RequestHandlers+<>c__DisplayClass0_0`2+<<Set>b__0>d[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]](<<Set>b__0>d<System.__Canon,System.__Canon> ByRef)
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Start[[ModelContextProtocol.RequestHandlers+<>c__DisplayClass0_0`2+<<Set>b__0>d[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]](<<Set>b__0>d<System.__Canon,System.__Canon> ByRef)
   at ModelContextProtocol.RequestHandlers+<>c__DisplayClass0_0`2[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<Set>b__0(ModelContextProtocol.Protocol.JsonRpcRequest, System.Threading.CancellationToken)
   at ModelContextProtocol.McpSession+<HandleRequest>d__25.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[ModelContextProtocol.McpSession+<HandleRequest>d__25, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]](<HandleRequest>d__25 ByRef)
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Start[[ModelContextProtocol.McpSession+<HandleRequest>d__25, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]](<HandleRequest>d__25 ByRef)
   at ModelContextProtocol.McpSession.HandleRequest(ModelContextProtocol.Protocol.JsonRpcRequest, System.Threading.CancellationToken)
   at ModelContextProtocol.McpSession+<HandleMessageAsync>d__22.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[ModelContextProtocol.McpSession+<HandleMessageAsync>d__22, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]](<HandleMessageAsync>d__22 ByRef)
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[ModelContextProtocol.McpSession+<HandleMessageAsync>d__22, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]](<HandleMessageAsync>d__22 ByRef)
   at ModelContextProtocol.McpSession.HandleMessageAsync(ModelContextProtocol.Protocol.JsonRpcMessage, System.Threading.CancellationToken)
   at ModelContextProtocol.McpSession+<>c__DisplayClass21_1+<<ProcessMessagesAsync>g__ProcessMessageAsync|0>d.MoveNext()
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[ModelContextProtocol.McpSession+<>c__DisplayClass21_1+<<ProcessMessagesAsync>g__ProcessMessageAsync|0>d, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]].ExecutionContextCallback(System.Object)
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(System.Threading.Thread, System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[ModelContextProtocol.McpSession+<>c__DisplayClass21_1+<<ProcessMessagesAsync>g__ProcessMessageAsync|0>d, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]].MoveNext(System.Threading.Thread)
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[ModelContextProtocol.McpSession+<>c__DisplayClass21_1+<<ProcessMessagesAsync>g__ProcessMessageAsync|0>d, ModelContextProtocol, Version=0.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]].ExecuteFromThreadPool(System.Threading.Thread)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading.PortableThreadPool+WorkerThread.WorkerThreadStart()
   at System.Threading.Thread.StartCallback()

Additional context

[McpServerToolType]
public class DemoTool(
    IHttpContextAccessor contextAccessor,
    WorkbenchService openWorkbenchService
)
{
    private readonly IHttpContextAccessor _contextAccessor = contextAccessor ?? throw new ArgumentNullException(nameof(contextAccessor));

    [McpServerTool, Description("get server time")]
    public async Task<string> ServerTime([Description("format")] string format = "yyyy-MM-dd HH:mm:ss")
    {
        
        return $"time: {DateTime.Now.ToString(format)}";
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions