sozsoft-platform/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.HttpApi/Tools/McpToolResult.cs
2026-10-11 01:03:36 +03:00

38 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Text.Json;
using ModelContextProtocol;
using ModelContextProtocol.Protocol;
namespace Sozsoft.Mcp.Tools;
/// <summary>
/// Servis sonucunu arac sonucuna cevirir. Deger SDK'nin donus degerini yazdigi bicimde
/// (<see cref="McpJsonUtilities.DefaultOptions"/>) JSON metnidir. <see cref="McpProblem"/> hata
/// sonucudur (<c>IsError</c>): istisna atilmadan modele ulasir, model nedeni okuyup girdiyi duzeltir.
/// </summary>
internal static class McpToolResult
{
/// <summary>Degeri olmayan araclarin (not ekleme, silme) basari cevabi.</summary>
private const string Done = "ok";
public static CallToolResult From<T>(McpOutcome<T> outcome)
=> outcome.TryGetValue(out var value, out var problem)
? Text(JsonSerializer.Serialize(value, McpJsonUtilities.DefaultOptions))
: Error(problem.Message);
public static CallToolResult From(McpProblem? problem)
=> problem is null ? Text(Done) : Error(problem.Message);
/// <summary>Degeri metin disinda icerik (resim) tasiyan araclar icin.</summary>
public static CallToolResult From<T>(McpOutcome<T> outcome, Func<T, IList<ContentBlock>> toContent)
=> outcome.TryGetValue(out var value, out var problem)
? new CallToolResult { Content = toContent(value) }
: Error(problem.Message);
public static CallToolResult Error(string message)
=> new() { IsError = true, Content = [new TextContentBlock { Text = message }] };
private static CallToolResult Text(string text)
=> new() { Content = [new TextContentBlock { Text = text }] };
}