ASP.NETのMCPで共通のログ機能を作成する方法
MCPの初期化処理の際に以下のようにAddCallToolFilterメソッドを追加します。
services.AddMcpServer()
.WithHttpTransport(options =>
{
options.Stateless = true;
})
.WithToolsFromAssembly()
.WithPromptsFromAssembly()
.WithResourcesFromAssembly()
.AddCallToolFilter(HigLaboAppMcpErrorLogFilter.Handle);
using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.Threading;
namespace HigLaboApp.Core;
public class HigLaboAppMcpErrorLogFilter
{
public static McpRequestHandler<CallToolRequestParams, CallToolResult> Handle(McpRequestHandler<CallToolRequestParams, CallToolResult> next)
{
return async (context, cancellationToken) =>
{
try
{
return await next(context, cancellationToken);
}
catch (Exception ex)
{
//ログの追加処理を書く
//エラーがあったことをクライアント(ChatGPTやClaude)に知らせる
var result = new CallToolResult
{
IsError = true,
Content =
[
new TextContentBlock
{
Text = $"Internal server error.\n{ex.Message}"
}
]
};
return result;
}
};
}
}