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

news2025/4/15 10:35:12

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://www.coloradmin.cn/o/2334121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python文件打包无法导入ultralytics模块

&#x1f4a5;打包的 .exe 闪退了&#xff1f;别慌&#xff01;教你逐步排查 PyInstaller 打包的所有错误&#xff01; &#x1f6e0; 运行 .exe 查看报错信息✅ 正确姿势&#xff1a; ⚠ importlib 动态导入导致打包失败❓什么是动态导入&#xff1f;✅ 解决方式&#xff1a; …

AMBA-CHI协议详解(二十六)

AMBA-CHI协议详解(一)- Introduction AMBA-CHI协议详解(二)- Channel fields / Read transactions AMBA-CHI协议详解(三)- Write transactions AMBA-CHI协议详解(四)- Other transactions AMBA-CHI协议详解(五)- Transaction identifier fields AMBA-CHI协议详解(六…

Go小技巧易错点100例(二十六)

本期分享&#xff1a; 1. string转[]byte是否会发生内存拷贝 2. Go程序获取文件的哈希值 正文&#xff1a; string转[]byte是否会发生内存拷贝 在Go语言中&#xff0c;字符串转换为字节数组&#xff08;[]byte&#xff09;确实会发生内存拷贝。这是因为在Go中&#xff0c;字…

FPGA_BD Block Design学习(一)

PS端开发流程详细步骤 1.第一步&#xff1a;打开Vivado软件&#xff0c;创建或打开一个工程。 2.第二步&#xff1a;在Block Design中添加arm核心&#xff0c;并将其配置为IP核。 3.第三步&#xff1a;配置arm核心的外设信息&#xff0c;如DDR接口、时钟频率、UART接口等。 …

ubuntu20.04+qt5.12.8安装serialbus

先从官网https://download.qt.io/archive/qt/5.12/5.12.8/submodules/ 下载 qtserialbus-everywhere-src-5.12.8.tar.xz 有需要其他版本的点击返回上一级自行寻找对应版本。 也可从 https://download.csdn.net/download/zhouhui1982/90595810 下载 在终端中依次输入以下命令…

如何查看自己抖音的IP属地?详细教程+常见问题解答

在当今互联网时代&#xff0c;IP属地信息已成为各大社交平台&#xff08;如抖音、微博、快手等&#xff09;展示用户真实网络位置的重要功能。无论是出于隐私保护、账号安全&#xff0c;还是单纯好奇自己的IP归属地&#xff0c;了解如何查看抖音IP属地都很有必要。 本文将详细介…

⑪数据中心网络M-LAG实战

一、DeviceA-M-LAG-Mater配置 1、M-LAG 系统配置。 # m-lag mad exclude interface GigabitEthernet1/0/7 m-lag mad exclude interface Vlan-interface100 m-lag mad exclude interface Vlan-interface101 m-lag system-mac 0002-0002-0002 m-lag system-number 1 m-la…

化工企业数字化转型:从数据贯通到生态重构的实践路径

一、战略定位&#xff1a;破解行业核心痛点 化工行业面临生产安全风险高&#xff08;全国危化品企业事故率年增5%&#xff09;、能耗与排放压力大&#xff08;占工业总能耗12%&#xff09;、供应链协同低效&#xff08;库存周转率低于制造业均值30%&#xff09;三大挑战。《石…

JAVA——初识JAVA

文章目录 如何在cmd上编译、运行代码解析String[] args中放的是什么Java结构编译运行可能遇到的错误Java中的注释Java的三种注释编码不一致的问题 IDEA常用基础开发快捷键补齐快捷键注释快捷键 IDEA的基础调式方法标识符 如何在cmd上编译、运行 在没有集成开发环境下&#xff…

Shell脚本的学习

编写脚本文件 定义以开头&#xff1a;#!/bin/bash #!用来声明脚本由什么shell解释&#xff0c;否则使用默认shel 第一步&#xff1a;编写脚本文件 #!/bin/bash #注释 echo "这是输出" 第二步&#xff1a;加上执行权限&#xff1a;chmod x 脚本文件名.sh 第三步&…

专题十四:动态路由——OSPF

一、OSPF简介 开放式最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09;是IETF组织开发的一个基于链路状态的内部网关协议&#xff08;Interior Gateway Protocol&#xff09;&#xff0c;采用DIjkstra算法&#xff0c;协议号是89。用于自治系统&#xff08;A…

Cocos Creator Shader入门实战(八):Shader实现圆形、椭圆、菱形等头像

引擎&#xff1a;3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 Shader的学习是一条漫长的道路。 理论知识的枯燥无味&#xff0c;让很多人选择了放弃。然而不得不说&#xff1a;任何新知识、新领域的学习&#xff0c;本身面临的都是问题&#xff01; 互联网和AI给了我…

【AI论文】VCR-Bench:视频链式思考推理的综合评估框架

摘要&#xff1a;思想链&#xff08;CoT&#xff09;推理的进步显著增强了大型语言模型&#xff08;LLMs&#xff09;和大型视觉语言模型&#xff08;LVLMs&#xff09;的能力。 然而&#xff0c;目前仍然缺乏一个严格的视频CoT推理评估框架。 目前的视频基准测试无法充分评估推…

数据中台、BI业务访谈(二):组织架构梳理的坑

这是数据中台、BI业务访谈系列的第二篇文章&#xff0c;在上一篇文章中&#xff0c;我重点介绍了在给企业的业务部门、高层管理做业务访谈之前我们要做好行业、业务知识的功课。做好这些功课之后&#xff0c;就到了实际的访谈环节了。 业务访谈关键点 那么在具体业务访谈的时…

【零基础实战】Ubuntu搭建DVWA漏洞靶场全流程详解(附渗透测试示例)

【零基础实战】Ubuntu搭建DVWA漏洞靶场全流程详解(附渗透测试示例) (声明:实际操作请遵守网络安全法,仅在授权环境进行测试,仅供个人研究) 一、DVWA靶场简介 DVWA(Damn Vulnerable Web Application)是专为网络安全学习者设计的漏洞演练平台,包含SQL注入、XSS、文件…

库学习04——numpy

一、基本属性 二、 创建数组 &#xff08;一&#xff09;arange a np.arange(10,20,2) # [10,12,14,16,18] 只有一个参数n的话&#xff0c;默认是从0到n-1的一维数组。 &#xff08;二&#xff09;自定义reshape a np.arange(12).reshape((3,4)) [[ 0 1 2 3][ 4 5 …

Win10系统安装WSL2-Ubuntu, 并使用VScode开始工作

本教程基于博主当前需要使用 WSL2(Windows Subsystem for Linux 2) 而编写&#xff0c;将自己使用的经过分享给大家。有什么意见建议敬请大家批评指正。此过程需要打开 Microsoft Store 话不多说&#xff0c;立即开始~ 文章目录 1. 检查系统版本2. 启动 WSL 功能3. 安装Ubuntu4…

SLAM(七)-卡尔曼滤波

SLAM&#xff08;七&#xff09;-卡尔曼滤波 一、卡尔曼滤波(KF)二、扩展卡尔曼滤波(EKF)三、误差状态卡尔曼滤波(ESKF) 参考《概率机器人》、《Principles of GNSS&#xff0c;lnertial and Multisensor lntegrated Navigation Systems (Second Edition)》 一、卡尔曼滤波(KF)…

如何解决DDoS攻击问题 ?—专业解决方案深度分析

本文深入解析DDoS攻击面临的挑战与解决策略&#xff0c;提供了一系列防御技术和实践建议&#xff0c;帮助企业加强其网络安全架构&#xff0c;有效防御DDoS攻击。从攻击的识别、防范措施到应急响应&#xff0c;为网络安全工作者提供了详细的操作指引。 DDoS攻击概览&#xff1a…

Windows for Redis 后台服务运行

下载 redis 安装包 地址&#xff1a;https://github.com/tporadowski/redis/releases 解压zip压缩包&#xff0c;执行 redis-server.exe 即可以窗口模式运行&#xff08;窗口关闭则服务关闭&#xff09; 运行窗口可以看到&#xff0c;端口是 6379 我这里使用 nvaicat 客服端测…