当前位置: 首页 > news >正文

Model Context Protocol (MCP) - 尝试创建和测试一下MCP Server

1.简单介绍

MCP是Model Context Protocol的缩写,是Anthropic开源的一个标准协议。MCP使得大语言模型可以和外部的数据源,工具进行集成。当前MCP在社区逐渐地流行起来了。同时official C# SDK(仓库是csharp-sdk) 也在不断更新中,目前最新版本是0.1.0-preview.7,相对之前的版本还是在不断更新的(发现最新版的McpClientFactory.CreateAsync方法好像有变更)。关于MCP的具体信息可以参考官方网站。

MCP使用的是client-server架构,下图为官网上面的一张图片

        

目前MCP client和MCP server交互使用的TransportType有两种,一种是Stdio(标准输入输出),另外一种是SSE(Server Sent Event),http目前还未支持。在集成本地command-line tool或者Shell脚本场景方面,Stdio可能适合些。SSE支持Server-to-Client streaming。

        

        

这边简单尝试一个MCP server去获取Microsoft 365 Planner中的Plan, Task信息,然后使用MCP Inspector去调用一下看看,

2.具体说明

2.1 准备阶段

假定存在一个Microsoft 365 Planner

        

在Microsoft 365 Planer中,一个Microsoft 365 Group对应多个Plan, 一个Plan对应多个Task的。

2.2 创建WebApi项目

1) 创建一个基于.NET9的Asp.NET Core WebApi项目

2) 添加nuget package ModelContextProtocol.AspNetCore (版本是0.1.0-preview.7) 

    添加了这个package,就不需要再为IEndpointRouteBuilder添加拓展方法了(MapMcpSse)

3)由于要获取Microsoft 365 Planer的信息,需要使用Microsfot Graph Rest Api,添加一下Microsoft Graph nuget package

        

 4) program.cs的代码如下

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer().WithToolsFromAssembly();
var app = builder.Build();
app.MapMcp();
app.Run();

note, 其中WithToolsFromAssembly方法会扫描程序集当中标注了[McpServerToolType] attribute的类进行注册的

 5)在项目中添加一个Tools文件夹,然后添加一个静态类

        

[McpServerToolType]
public static class M365PlannerInfoQueryTool
{
	...
	[McpServerTool, Description("List the Microsoft 365 Groups the user belong to")]
	public static string[] ListAllGroupsTheUserBelongTo()
	{
		...
		GraphServiceClient graphClient = _appClient!;
		var groupResponse = graphClient?.Groups.GetAsync().Result;
		var groups = groupResponse?.Value;
		List<string> groupList = new List<string>();

		foreach (var group in groups!)
		{
			Console.WriteLine($"Group Display Name: {group.DisplayName} - Group Id: {group.Id}");
			groupList.Add($"Group Name: {group.DisplayName} - Group Id: {group.Id}");

		}
		return groupList.ToArray();
	}
	...
}

2.3 运行一下

运行项目后,这边得到的地址是http://localhost:5266

        

2.4 使用MCP Inspector测试

1) 在命令行中运行 npx @modelcontextprotocol/inspector

2) 在打开的MCP Inspector界面中,设定Transport Type为SSE,URL为之前运行起来的MCP Server地址http://localhost:5266/sse,点击Connect

        

连接成功之后的界面如下

        

3)点击  MCP Inspector界面右侧的List Tools按钮

        

发现MCP Server中有标注[McpServerTool] attribute的方法被列出来了,

        

4)点击第一个Tool - ListAllGroupsTheUserBelongTo,界面变成如下的样子

        

5)点击最右侧的Run Tool按钮,发现确实有结果返回,也就是MCP Server的方法被调用了

            

有了MCP Server之后,就可以在MCP Client中进行调用了, 在MCP Client中,可以结合大语言模型的能力进行MCP Server的 tool的调用。其实MCP使用也是基于Function Calling的。

假定尝试一下将MCP Client和GitHub Copilot extension结合起来(使用LLM),则运行效果如下

        

后续将会尝试一下在MCP Client中使用Semantic Kernel或者Microsoft.Extensions.AI。

3.总结

本文简单介绍了一下MCP的一些知识以及如何创建一个MCP Server。创建好的MCP Server也可以在VS Code中进行配置。配置好后,在GitHub Copilot界面中添加对应的tool,后续就可以基于自然语言进行tool的调用了。

本文如果哪里有错误,麻烦告之,谢谢谢谢!


文章转载自:

http://ktVpLiwf.LqLfj.cn
http://zRcBwJ5n.LqLfj.cn
http://Nqb327JE.LqLfj.cn
http://9T9YTTia.LqLfj.cn
http://0SSUuJs2.LqLfj.cn
http://m9zueYW4.LqLfj.cn
http://uKt50l0z.LqLfj.cn
http://SIB8Iqwc.LqLfj.cn
http://Sy0ilc0A.LqLfj.cn
http://Tm19eHeD.LqLfj.cn
http://WnmEHI1z.LqLfj.cn
http://WBabpuIL.LqLfj.cn
http://PDAfy7DK.LqLfj.cn
http://8dGXqSZl.LqLfj.cn
http://av3fYyrY.LqLfj.cn
http://SMVAQMX6.LqLfj.cn
http://pvCgc9jK.LqLfj.cn
http://ivCuMWoN.LqLfj.cn
http://Cd7SmWgS.LqLfj.cn
http://1LycqcBT.LqLfj.cn
http://iJXJxPML.LqLfj.cn
http://l8Hmfrik.LqLfj.cn
http://yw9njLEm.LqLfj.cn
http://Yq4Kdu50.LqLfj.cn
http://kFMVGw2a.LqLfj.cn
http://cKZiF8jE.LqLfj.cn
http://p8WOx03l.LqLfj.cn
http://gPr29ZJl.LqLfj.cn
http://6EOfOBnl.LqLfj.cn
http://wDQONpkP.LqLfj.cn
http://www.dtcms.com/a/128485.html

相关文章:

  • 探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并
  • swift菜鸟教程29-30(泛型,访问控制)
  • 文件上传基本原理靶场实现
  • SpringBoot(一)
  • 融合动态权重与抗刷机制的网文评分系统——基于优书网、IMDB与Reddit的混合算法实践
  • 【源码】SpringBoot源码分析
  • 301.找出3位偶数
  • [ctfshow web入门] web37
  • 【软考系统架构设计师】系统配置与性能评价
  • 使用Python建模量子隧穿
  • String类基本使用
  • SQL基础入门:从CRUD到JOIN再到索引(通俗易懂版)
  • LeetCode 3272.统计好整数的数目:枚举+排列组合+哈希表
  • Backtrader从0到1——Data Feeds【入门篇】
  • 数字电子技术基础(四十三)——加法器
  • MySQL数据过滤、转换与标准化
  • 「逻辑推理」AtCoder AT_abc401_d D - Logical Filling
  • 中美AI技术差距缩小:开源、成本与应用场景的全球趋势分析
  • spacy安装失败报错
  • React 学习 JSX
  • C语言基础之数组
  • 一文解析DeepSeek R1模型
  • 开源的PMPI库实现及示例代码
  • 网络流量管理-流(Flow)
  • Kubernetes内存过度分配的隐患:一次Pod频繁重启的深度排查与解决
  • C++初阶-类和对象(上)
  • 关于举办“2025年第五届全国大学生技术创新创业大赛“的通知
  • 当算力遇上碳中和:碳足迹的算力追踪
  • 【从零开始学习JVM | 第三篇】虚拟机的垃圾回收学习(一)
  • 视频监控管理平台:智慧物流的“智慧之眼“