Rediger

Analyze MCP server tool calls telemetry

APPLIES TO: Business Central 2025 release wave 1, version 26.0, and later

Model Context Protocol (MCP) Server telemetry gathers data about tool calls made through MCP Server configurations in Business Central. This telemetry helps you understand how external tools and services are being used through the MCP protocol.

Learn how to configure the MCP server inConfigure Business Central MCP Server.

MCP Server tool called

Occurs when an MCP Server tool is called from Business Central.

General dimensions

Dimension Description or value
message MCP Server tool called: '{toolName}'
user_Id The user telemetry ID for the user. From the user card, you can use user_Id to identify the user who triggered this telemetry event. Learn more in Assign a telemetry ID to users.

Custom dimensions

Dimension Description or value
aadTenantId Specifies the Microsoft Entra tenant ID used for Microsoft Entra authentication. For on-premises, if you aren't using Microsoft Entra authentication, this value is common.
companyName The current company name.
environmentName Specifies the name of the tenant environment. Learn more in Managing Environments.
environmentType Specifies the environment type for the tenant, such as Production or Sandbox. Learn more in Environment Types.
eventId RT0054
configurationName Specifies the name of the MCP configuration that was used for the tool call.
configurationSystemId Specifies the system ID (GUID) of the MCP configuration record.
toolName Specifies the name of the MCP tool that was called.
dynamicToolName Specifies the action name for dynamic MCP tools. This dimension is populated when using dynamic tool configurations.
clientName Specifies the name of the MCP client that initiated the tool call.
authAppId Specifies the authenticated application ID from the security token.
result Specifies the result of the operation. Possible values are Success or Failure.
totalTime Specifies the total time the operation ran for.
serverExecutionTime Specifies the amount of time the operation took on server. The time has the format hh:mm:ss.sssssss.
toolInvocationResult Specifies the result of the MCP tool invocation. Possible values are Success or Failure.
toolInvocationFailureReason Specifies the reason for the tool invocation failure. This dimension is only populated when toolInvocationResult is Failure.

Sample KQL code

This KQL code can help you get started analyzing MCP Server tool calls:

traces
| where timestamp > ago(60d) // adjust as needed
| where customDimensions.eventId == 'RT0054'
| project timestamp
, aadTenantId = customDimensions.aadTenantId
, environmentName = customDimensions.environmentName
, environmentType = customDimensions.environmentType
, companyName = customDimensions.companyName
, configurationName = customDimensions.configurationName
, toolName = customDimensions.toolName
, dynamicToolName = customDimensions.dynamicToolName
, clientName = customDimensions.clientName
, toolInvocationResult = customDimensions.toolInvocationResult
, toolInvocationFailureReason = customDimensions.toolInvocationFailureReason
, totalTime = customDimensions.totalTime
, serverExecutionTime = customDimensions.serverExecutionTime

Sample KQL code for failed tool invocations

This KQL code can help you analyze failed MCP Server tool calls:

traces
| where timestamp > ago(60d) // adjust as needed
| where customDimensions.eventId == 'RT0054'
| where customDimensions.toolInvocationResult == 'Failure'
| project timestamp
, aadTenantId = customDimensions.aadTenantId
, environmentName = customDimensions.environmentName
, environmentType = customDimensions.environmentType
, companyName = customDimensions.companyName
, configurationName = customDimensions.configurationName
, toolName = customDimensions.toolName
, clientName = customDimensions.clientName
, toolInvocationFailureReason = customDimensions.toolInvocationFailureReason
| summarize FailureCount = count() by tostring(toolName), tostring(toolInvocationFailureReason)
| order by FailureCount desc

Sample KQL code for tool usage by configuration

This KQL code can help you understand which MCP configurations and tools are being used most frequently:

traces
| where timestamp > ago(30d) // adjust as needed
| where customDimensions.eventId == 'RT0054'
| summarize 
    TotalCalls = count()
  , SuccessfulCalls = countif(customDimensions.toolInvocationResult == 'Success')
  , FailedCalls = countif(customDimensions.toolInvocationResult == 'Failure')
  , AvgServerExecutionTime = avg(toreal(customDimensions.serverExecutionTime))
  by 
    ConfigurationName = tostring(customDimensions.configurationName)
  , ToolName = tostring(customDimensions.toolName)
  , ClientName = tostring(customDimensions.clientName)
| extend SuccessRate = round(100.0 * SuccessfulCalls / TotalCalls, 2)
| order by TotalCalls desc

To learn more about how to set up alerting on Business Central telemetry, see Alert on Telemetry.

Model Context Protocol (MCP) in Business Central overview
Configure Business Central MCP Server
Connect to Business Central MCP Server with Visual Studio Code
Connect to Business Central MCP server with non-Microsoft clients
Business Central Admin Center API MCP server
Monitoring and Analyzing Telemetry
Enable Sending Telemetry to Application Insights
Alert on Telemetry