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

C#实现SSE通信方式的MCP Server

该专栏优先在飞书发布,欢迎收藏关注!

https://www.feishu.cn/community/article?id=7507084665509904403

前面的课程,我们使用MCP Server,用的是网络上魔搭提供的。

下面我们一起来实现,用C#实现自己的MCP Server。

MCP Server通信方式支持SSEStdio。

下面我们先实现SSE通信方式的MCP Server。

一、创建项目

创建Web API项目。

图片

项目名称

图片

勾选配置如下:

图片

项目创建完成后。

添加依赖库:ModelContextProtocol.AspNetCore,版本为:0.1.0-preview.14。添加的时候记得勾选:包括预发行版。

图片

二、代码实现

2.1 Program.cs

Program.cs代码修改如下,注册 McpServer 相关服务、并自动扫描 tool 工具列表。

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer() // 注册 McpServer 相关服务.WithHttpTransport() // 使用HTTP传输的MCP请求和会话.WithToolsFromAssembly() // 从程序集中扫描添加 tool工具列表;
var app = builder.Build();
app.UseHttpsRedirection();
// 注册MCP协议终结点
app.MapMcp();
app.Run();

2.2 SSe 实例代码

添加类:DemoTool

图片

DemoTool的代码如下,这里有几个关键点,通过为类、方法、参数来添加标识,这样才能被识别 MCP tool:

1、[McpServerToolType] 标记此类为 MCP 服务器工具类型

2、[McpServerTool] 标记的方法会被框架识别并注册为可用工具。

3、[Description(“获取服务器时间”)]  描述方法的工具。

4、[Description(“格式”)]   描述参数。

// 服务器上下文模型相关的协议定义
using ModelContextProtocol.Server;
// 用于支持组件属性描述等功能
using System.ComponentModel;
namespace MCPServer.SSE
{// 标记此类为 MCP 服务器工具类型[McpServerToolType]public static class DemoTool{/// <summary>/// 服务器工具方法,用于获取当前服务器时间。/// </summary>/// <param name="format">时间格式字符串,默认值为 "yyyy-MM-dd HH:mm:ss"</param>/// <returns>当前服务器时间按照指定格式转换后的字符串</returns>///标记的方法会被框架识别并注册为可用工具。[McpServerTool, Description("获取服务器时间")]public static string ServerTime([Description("格式")] string format = "yyyy-MM-dd HH:mm:ss"){return DateTime.Now.ToString(format);}}
}

以上代码功能,根据客户端要求的格式,返回服务器时间。

2.3 启动项目

运行项目如下,url 后面加 /sse,这个是默认地址。

图片

三、结合MCP Client 测试效果

使用上一个课程:实现MCP Client 与 LLM 连接,实现抓取网页内容功能! 的Client示例。

把 Endpoint 的值改为我们自己的: https://localhost:7130/sse

图片

运行MCP Client,成功连接MCP Server,并打印出工具列表。

图片

测试效果如下,根据用户要求的格式,返回对应格式的时间。

图片

好了,今天就分享到这边!

下一个课程:实现Stdio通信方式的MCP Server。

**文中示例代码:**https://pan.quark.cn/s/e188ecb7eae0

- End -

推荐阅读

C#实现MCP Client 与 LLM 连接,抓取网页内容功能!

VS Code + Cline + 魔搭MCP Server 实现抓取网页内容。

C#实现自己的MCP Client


文章转载自:

http://KoBR4xUs.rLwgn.cn
http://HxLLLgkd.rLwgn.cn
http://QqNxMlW9.rLwgn.cn
http://UUQ4135o.rLwgn.cn
http://3rBglyWg.rLwgn.cn
http://1P1b8SyX.rLwgn.cn
http://BZzPNABf.rLwgn.cn
http://AdopQeIl.rLwgn.cn
http://GtMkCRD1.rLwgn.cn
http://4hnXLZYg.rLwgn.cn
http://E2jvfDJt.rLwgn.cn
http://wtHgFSYr.rLwgn.cn
http://5QK6jGh1.rLwgn.cn
http://bnwe13Jv.rLwgn.cn
http://KL9tu0Kq.rLwgn.cn
http://I6XQsIYB.rLwgn.cn
http://DBOxeyml.rLwgn.cn
http://Ijrw7jNB.rLwgn.cn
http://IFITv5VT.rLwgn.cn
http://98jF9VFe.rLwgn.cn
http://FzdpzFrM.rLwgn.cn
http://scWZ24ex.rLwgn.cn
http://ivg9TkU3.rLwgn.cn
http://99yt5yIK.rLwgn.cn
http://PZmAENqH.rLwgn.cn
http://5Sj5AYHu.rLwgn.cn
http://FcVcRrIw.rLwgn.cn
http://vjPRiVY1.rLwgn.cn
http://J8bkgbzO.rLwgn.cn
http://OM2V3Ckt.rLwgn.cn
http://www.dtcms.com/a/214610.html

相关文章:

  • 1期临床试验中的联合i3+3设计
  • Excel快捷键大全
  • 【Spring】Spring AI 核心知识(一)
  • AI模型评估指南:准确率、召回率、F1值到底怎么用
  • TCP 三次握手,第三次握手报文丢失会发生什么?
  • lwip_bind、lwip_listen 是阻塞函数吗
  • 【LeetCode 热题 100】买卖股票的最佳时机 / 跳跃游戏 / 划分字母区间
  • 有铜半孔的设计规范与材料创新
  • C++ ——new和malloc的区别(详细)
  • JVM垃圾回收器详细介绍
  • 保姆式 网站建设wordpress全教程----包含疑难杂症
  • PHP:赋能Web开发的经典语言与未来演进
  • MySQL 中 DISTINCT 和 GROUP BY 的区别与联系
  • Linux基础与Nginx配置实战:从入门到精通
  • ESP8266+STM32 AT驱动程序,心知天气API 记录时间: 2025年5月26日13:24:11
  • 【后端高阶面经:MongoDB篇】41、MongoDB 是怎么做到高可用的?
  • FastDFS集群部署与性能优化实战
  • vite常见面试问题
  • 多模态大语言模型arxiv论文略读(九十三)
  • Zephyr OS: periodic_adv_rsp代码架构和实现
  • Linux基本指令篇 —— clear指令
  • 2.1 一文掌握 TypeScript 操作符
  • 寒武纪显卡MLU编译安装mmcv1.7.0、mmdetection2.26.0并测试
  • 如何在 ONLYOFFICE 演示文稿中调整段落首行缩进
  • 如何通过AI辅助数据分析
  • 凯恩斯宏观经济学与马歇尔微观经济学的数学建模和形式化表征
  • Flutter Container组件、Text组件详解
  • 程序编码规范,软件设计规范
  • 从0到1搭建AI绘画模型:Stable Diffusion微调全流程避坑指南
  • 《软件工程》第 6 章 - 软件设计概论