LinkToolAddin/host/CallMcp.cs

28 lines
1.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using LinkToolAddin.server;
using log4net;
using Newtonsoft.Json;
namespace LinkToolAddin.host
{
public class CallMcp
{
private static readonly ILog log = LogManager.GetLogger(typeof(CallMcp));
public static async Task<string> CallInnerMcpTool(string jsonRpcString)
{
log.Info("通过反射调用内部MCP工具");
var jsonRpcEntity = JsonConvert.DeserializeObject<JsonRpcEntity>(jsonRpcString);
Type type = Type.GetType("LinkToolAddin.client.tool"+jsonRpcEntity.Method.Split(':')[0]);
MethodInfo method = type.GetMethod(jsonRpcEntity.Method.Split(':')[1],BindingFlags.Public | BindingFlags.Static);
var task = method.Invoke(null, new object[] { jsonRpcEntity.Params }) as Task<JsonRpcResultEntity>;
JsonRpcResultEntity result = await task;
return JsonConvert.SerializeObject(result);
}
}
}