前面的课程,我们使用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

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

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

- End -

推荐阅读

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

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

C#实现自己的MCP Client

C#实现SSE通信方式的MCP Server的更多相关文章

  1. Nacos 1.1.4 发布,业界率先支持 Istio MCP 协议

    Nacos是阿里巴巴开源的服务发现与配置管理项目,本次发布的1.1.4版本,主要带来的是与Istio的对接功能,使用的是Istio最新的MCP协议.本文将介绍包括这个功能在内的新版本发布的功能. 升级 ...

  2. 基于Server-Sent Event的简单在线聊天室

    Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览知乎时 ...

  3. web服务器tomcat入门实战

    一.tomcat介绍1.1 引入tomcat Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Su ...

  4. 05点睛Spring MVC 4.1-服务器端推送

    转发:https://www.iteye.com/blog/wiselyman-2214626 5.1 服务器端推送 SSE(server send event)是一种服务器端向浏览器推送消息的技术, ...

  5. SpringCloud入门系列0-Nacos的安装与配置

    背景 工作有一些年头了,自从19年初彻底转了java(这又是另一篇心酸的故事),突然感觉自己荒废了好几年(不是说.net不好,而是回顾自己这几年做的很多东西都浮于表面,有时候弄成很忙的样子,回头看看自 ...

  6. CentOS 7 Nacos 集群搭建

    环境 CentOS 7.4 MySQL 5.7 nacos-server-1.1.2 本次安装的软件全部在 /home/javateam 目录下. MySQL 安装 首先下载 rpm 安装包,地址:h ...

  7. 我在组内的Nacos分享

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. Nacos简介 Nacos : Naming and Configuration Servic ...

  8. Comet之SSE(Server - Sent - Envent,服务器发送事件)

    1.SSE API 先要创建一个新的EventSource对象,并传进一个入口点: var source = new EventSource("myenvent.php"); △: ...

  9. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Serve ...

  10. Ajax、Comet、Websocket、SSE

    从 http 协议说起 1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式 ...

随机推荐

  1. win11 输入法自定义短语输出日期时间变量

    自定义短语中输入%yyyy%-%MM%-%dd% %HH%:%mm%:%ss%

  2. [解决方案]git pull : error: cannot lock ref 'refs/remotes/origin/*' (unable to update local ref)

    错误 git pull 报错不能更新本地分支 错误分析 本地分支跟远程分支不匹配 导致更新失败 解决方案 备份自己修改的代码 .git\refs\remotes (文件路径)对应删除你报错的分支 gi ...

  3. Qt+OpenCV实现图片压缩(JPEG、PNG)

    一.概述 需求: 1.编写一个小工具实现图片压缩 2.图片仅支持JPEG和PNG格式 3.目的是压缩图片在磁盘中所占用的大小 4.使用的开发语言是Qt.C++.OpenCV 5.压缩的质量可以动态调节 ...

  4. Windows编程----进程的当前目录

    进程的当前目录 Windows  Api中有大量的函数在调用的时候,需要传递路径.比如创建文件,创建目录,删除目录,删除文件等等.创建文件的APICreateFile做比喻,如果我们要创建的文件路径不 ...

  5. MFC中AfxBeginThread、AfxEndThread、GetExitCodeThread的配合使用(工作者线程)

    //线程入口函数(全局) UINT MyThreadProc(LPVOID pParam) { //在需要添加返回值的地方 if (...) { AfxEndThread(0); return 0; ...

  6. Destination host unreachable 一般解决办法

    症状: 上网各类应用基本正常,但是在命令行下使用ping命令,无论任何地址,均反馈Destination host unreachable. 分析: 输入命令arp -a可以看到网关的MAC地址正常解 ...

  7. Linux SWAP交换分区应该设置多大?

    乾乾君子 2019-02-21 15:21:02 23370 收藏 34分类专栏: 杂记 文章标签: linux centos swap分区版权    Linux SWAP交换分区,就是我们课本说讲过 ...

  8. 使用Docker部署服务

    一.Docker概念 1.操作系统层面的虚拟化技术 2.隔离的进程独立于宿主和其它的隔离的进程 - 容器 3.GO语言开发 4.特点:高效的利用系统资源:快速的启动时间:一致的运行环境:持续交付和部署 ...

  9. 【技术分析】简单了解 AccessControl

    当我们开发一个智能合约,但是里面有一些函数不能随便让别人调用,只能"拥有权限"的管理员能够调用,那么这时候我们会用到权限管理机制. 实现起来也很简单,设置一个 owner 变量,通 ...

  10. static修饰成员方法、static修饰成员的特点总结、浅聊主方法-java se进阶 day01

    1.工具类的介绍 工具类不是用于描述事物的类,而是帮我们完成事情的类(打工) 如图 当我们编写完这个类后,我们会发现一件事,这个类自己本身并没有意义,这个类完全是给用户进行调用方法的 既然是专门给用户 ...