AL MCP: al_symbolrelations always fails, SymbolRelationsService is not registered in the standalone server

オープン
#8,371 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
csharp
領域
devtools

調査の方向性

The failure is a missing DI registration: the stack trace points to McpServerFactory.RegisterSharedServices (McpServerFactory.cs line 317), which resolves SymbolRelationsService with GetRequiredService but never registers it. Start by checking that registration list against the other tools' services, then confirm the al_symbolrelations call succeeds with no project loaded. Done when the tool returns relations or the no-projects message instead of the generic error.

索引モデルが issue の本文から書いたものです。

説明

1. Describe the bug

al_symbolrelations is advertised by the standalone AL MCP server (altool launchmcpserver) in tools/list, but every call to it fails. The client only receives the generic An error occurred invoking 'al_symbolrelations'.

The server's stderr shows the cause: the service behind the tool is not registered with the dependency injection container.

fail: ModelContextProtocol.Server.McpServer[1433779783]
      "al_symbolrelations" threw an unhandled exception.
      System.InvalidOperationException: No service for type 'Microsoft.Dynamics.Nav.CodeAnalysis.Workspaces.LanguageModelTools.SymbolRelations.SymbolRelationsService' has been registered.
         at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
         at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
         at Microsoft.Dynamics.BusinessCentral.ALMcp.McpServerFactory.<>c.<RegisterSharedServices>b__6_4(IServiceProvider sp) in X:\source\Prod\almcp\Services\McpServerFactory.cs:line 317
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
         ...
         at Microsoft.Extensions.DependencyInjection.McpServerBuilderExtensions.CreateTarget(IServiceProvider services, Type type)
         at ModelContextProtocol.Server.AIFunctionMcpServerTool.InvokeAsync(RequestContext`1 request, CancellationToken cancellationToken)

The failure does not depend on the project or the arguments. I get the same exception:

  • with no project loaded, and with projects loaded and their symbols already indexed
  • with symbolName + symbolKind (the example in the tool's own description), with symbolId from an al_symbolsearch result, and with empty arguments
  • from an MCP client, and from raw JSON-RPC over stdio with no client involved

Other tools on the same server instance answer normally (al_symbolsearch, al_compile, al_inspectpage, al_getnextobjectid), so this looks specific to this tool's registration.

2. To Reproduce

No AL code is needed.

  1. Start the server with no project: altool launchmcpserver --transport stdio
  2. Send these lines on stdin:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"repro","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"al_symbolrelations","arguments":{"parameters":{"symbolName":"Customer","symbolKind":"Table"}}}}
  1. Read the response to id 2 on stdout and the exception on stderr.

3. Expected behavior

The tool returns the relations of the symbol. With no project loaded, it returns an actionable message, as al_symbolsearch does: No projects are loaded in the workspace. Use the al_addproject tool to add a project, then retry.

4. Actual behavior

{"result":{"content":[{"type":"text","text":"An error occurred invoking 'al_symbolrelations'."}],"isError":true},"id":2,"jsonrpc":"2.0"}

The exception above is written to stderr only. Nothing about it reaches the file set with --logfile, even at --loglevel Debug.

5. Versions:

  • AL Language: 30.0.2863738, the latest pre-release on the Marketplace (altool --version: 30.0.43.45776+9c432ef3dff6a3c4df683465da5f5c539f6a8bf1). Not tested on the release channel (18.1.2842859).
  • Visual Studio Code: not involved (standalone altool); 1.144.0 installed
  • Business Central: not involved (the call fails before any server connection)
  • List of Visual Studio Code extensions that you have installed: not applicable, reproduced outside Visual Studio Code
  • Operating System:
    • Windows
    • Linux
    • MacOS
Final Checklist
  • Search the issue repository to ensure you are reporting a new issue

  • Reproduce the issue after disabling all extensions except the AL Language extension (reproduced outside Visual Studio Code)

  • Simplify your code around the issue to better isolate the problem (no code needed)

主要言語
PowerShell
スター
891
フォーク
287
平均マージ
4時間 7分
マージ済み PR(30日)
1

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

microsoft/AL のほかの issue

microsoft/AL の issue をすべて見る

似ている issue

DevTools の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。