You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
4.0 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

namespace McpStudy.McpClient;
internal class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("调用MCP服务示例");
await CallStdioAsync();
//请务必在调用前启动SseServer服务
await RequestSseServerAsync();
await Task.CompletedTask;
}
/// <summary>
/// 使用Mcp客户端直接调用Stdio类型的MCP服务
/// 真实项目或生产环境,请使用 `Microsoft.Extensions.AI`、`Microsoft.SemanticKernel`等AI库进行调用
/// </summary>
/// <returns></returns>
static async Task CallStdioAsync()
{
Console.WriteLine($"开始调用 Studio 类型的MCP服务......{System.Environment.NewLine}");
var clientTransport = new StdioClientTransport(new StdioClientTransportOptions
{
Name = "Everything",
Command = "dotnet",
Arguments = ["run", "--project", "E:\\软件项目\\学习项目\\AI学习\\McpStudy\\McpStudy.McpServerStdio\\McpStudy.McpServerStdio.csproj"],
});
Console.WriteLine("创建客户端......");
IMcpClient client = await McpClientFactory.CreateAsync(clientTransport);
Console.WriteLine($"创建客户端完成{System.Environment.NewLine}");
Console.WriteLine("列举MCP服务中可用的工具......");
foreach (McpClientTool tool in await client.ListToolsAsync())
{
Console.WriteLine($"工具名称:{tool.Name} 工具描述:({tool.Description})");
}
Console.WriteLine($"列举完成{System.Environment.NewLine}");
Console.WriteLine("调用Echo工具......");
CallToolResult result = await client.CallToolAsync
(
toolName: "Echo",
arguments: new Dictionary<string, object?>() { ["message"] = "Hello MCP!" },
cancellationToken: CancellationToken.None
);
Console.Write("Echo工具结果");
var content = result.Content.First(c => c.Type == "text") as TextContentBlock;
Console.WriteLine(content?.Text);
Console.WriteLine($"调用完成{System.Environment.NewLine}");
Console.WriteLine("调用 Studio 类型的MCP服务结束");
}
// <summary>
/// 使用Mcp客户端直接调用SSE类型的MCP服务
/// 真实项目或生产环境,请使用 `Microsoft.Extensions.AI`、`Microsoft.SemanticKernel`等AI库进行调用
/// </summary>
/// <returns></returns>
static async Task RequestSseServerAsync()
{
Console.WriteLine($"开始调用 SSE类型的MCP服务......{System.Environment.NewLine}");
var sseClientTransportOptions = new SseClientTransportOptions()
{
Endpoint = new Uri("http://localhost:5027/sse"),
};
var sseClientTransport = new SseClientTransport(sseClientTransportOptions);
Console.WriteLine("创建客户端......");
IMcpClient client = await McpClientFactory.CreateAsync(sseClientTransport);
Console.WriteLine($"创建客户端完成{System.Environment.NewLine}");
Console.WriteLine("列举MCP服务中可用的工具......");
foreach (McpClientTool tool in await client.ListToolsAsync())
{
Console.WriteLine($"工具名称:{tool.Name} 工具描述:({tool.Description})");
}
Console.WriteLine($"列举完成{System.Environment.NewLine}");
Console.WriteLine("调用Echo工具......");
CallToolResult result = await client.CallToolAsync
(
toolName: "Echo",
arguments: new Dictionary<string, object?>() { ["message"] = "Hello MCP!" },
cancellationToken: CancellationToken.None
);
Console.Write("Echo工具结果");
var content = result.Content.First(c => c.Type == "text") as TextContentBlock;
Console.WriteLine(content?.Text);
Console.WriteLine($"调用完成{System.Environment.NewLine}");
Console.WriteLine("调用 Studio 类型的MCP服务结束");
}
}