Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C#实现Stdio通信方式的MCP Server

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

作者头像
郑子铭
发布于 2025-06-28 06:50:41
发布于 2025-06-28 06:50:41
8300
代码可运行
举报
运行总次数:0
代码可运行

该专栏优先在飞书发布,欢迎收藏关注! https://www.feishu.cn/community/article?id=7507084665509904403

前面的课程,我们已经实现SSE通信方式的MCP Server。

下面来实现Stdio通信方式的MCP Server。

SSE方式,让我们可以与远程服务器交互。Stdio的方式,让我们可以与本地电脑交互,比如操作文件、操作数据库、与其他应用程序交互。

一、创建项目

创建控制台应用项目。

项目名称

勾选配置如下:

项目创建完成后。

添加依赖库:ModelContextProtocolServer.Stdio,版本为:0.0.1-preview-05。添加的时候记得勾选:包括预发行版。

二、代码实现

2.1 Program.cs

启动一个基于标准输入/输出(stdin/stdout)通信的协议服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 标准输入/输出协议服务器相关的类和方法。
using ModelContextProtocolServer.Stdio;
// 使用 StdioServer 类的 RunAsync 方法启动一个异步的标准输入/输出服务器。
await StdioServer.RunAsync(args);

2.2 Stadi 实例代码

添加类:FileTool

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

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

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

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

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

5、提供2个工具方法:读取本地文件内容,保存内容至本地文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// MCP 协议服务端所需的核心特性与类型。
using ModelContextProtocol.Server;
// 用于支持 [Description] 特性,提供描述信息。
using System.ComponentModel;
namespace MCPServer.Stdio
{
    /// <summary>
    /// 标记此类为 MCP 服务器可用的工具类型,客户端可通过协议调用其中的方法。
    /// </summary>
    [McpServerToolType]
    public static class FileTool
    {
        /// <summary>
        /// 读取指定路径的文件内容。
        /// </summary>
        /// <param name="path">要读取的文件的完整路径</param>
        /// <returns>文件的内容字符串</returns>
        [McpServerTool, Description("读取文件")]
        public static async Task<string> ReadFile([Description("文件路径")] string path)
        {
            // 检查文件是否存在,若不存在则抛出异常
            if (!File.Exists(path))
                throw new FileNotFoundException("文件不存在");
            // 异步读取文件内容并返回
            return await File.ReadAllTextAsync(path);
        }
        /// <summary>
        /// 将指定内容保存到指定路径的文件中。
        /// 如果目标目录不存在,则自动创建。
        /// </summary>
        /// <param name="path">要保存的文件路径</param>
        /// <param name="content">要写入文件的内容字符串</param>
        /// <returns>操作结果信息</returns>
        [McpServerTool, Description("保存文件")]
        public static async Task<string> SaveFile([Description("文件路径")] string path, [Description("内容")] string content)
        {
            try
            {
                // 获取文件所在目录路径
                var directory = Path.GetDirectoryName(path);
                // 如果目录不为空且不存在,则创建目录
                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
                // 使用异步方式将内容写入文件(覆盖模式)
                await File.WriteAllTextAsync(path, content);
                // 返回成功提示
                return $"文件已成功保存至: {path}";
            }
            catch (Exception ex)
            {
                // 捕获所有异常并返回错误信息,防止崩溃并便于调试
                return $"保存文件时发生错误: {ex.Message}";
            }
        }
    }
}

2.3 项目发布

三、结合MCP Client 测试效果

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

修改 Program.cs 的代码。

其中Command为项目发布后的程序路径。备注:路径记得修改为自己的!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建一个基于标准输入/输出(stdio)的客户端传输配置对象
var config = new StdioClientTransport(new StdioClientTransportOptions()
{
    // 设置要启动的服务端可执行文件路径
    Command = "e:\\project\\mcpdemo\\mcpserver.stdio\\bin\\release\\net8.0\\publish\\win-x64\\MCPServer.Stdio.exe"
});

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

输入以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
读取  e:\本地文件.txt 的内容

大模型会调用本地工具,读取本地文件的内容,并返回结果如下。

备注:本地文件 e:\本地文件.txt,需要提前创建。

输入以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
将内容:这是MPC Server实例,保存到文件路径:e:\stdio.txt

大模型会调用本地工具,将内容保存至本地文件,并返回结果如下。

也可以直接刚才保存的内容。

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何把ASP.NET Core WebApi打造成Mcp Server
MCP (Model Context Protocol)即模型上下文协议目前不要太火爆了,关于它是什么相信大家已经很熟悉了。目前主流的AI开发框架和AI工具都支持集成MCP,这也正是它的意义所在。毕竟作为一个标准的协议,当然是更多的生态接入进来才会有意义。使用MCP我们可以把Tools调用标准化,这意味着我们可以忽略语言、框架快速把工具融合到不同的模型中去。现在,如何把现有的业务逻辑快速的接入到模型中,成为模型落地很关键的一步,今天我们就借助微软的Semantic Kernel和Microsoft.Extensions.AI框架,通过简单的示例展示,如何把现有的ASP NET Core WebApi转换成MCP Server。
郑子铭
2025/06/11
1250
如何把ASP.NET Core WebApi打造成Mcp Server
MCP协议从原理到开发:一文读懂大模型交互的标准化革命!
本文系统介绍了MCP协议在大模型交互标准化中的创新应用,通过技术解析+实践案例的方式,阐述了MCP协议的架构设计、开发实现原理及实际应用效果。重点探讨了MCP如何解决AI工具调用碎片化问题,并通过企业微信机器人开发实例展示MCP服务端/客户端开发全流程,干货满满点赞收藏!
腾讯云开发者
2025/04/18
3.4K1
MCP协议从原理到开发:一文读懂大模型交互的标准化革命!
工良出品 | 长文讲解 MCP 和案例实战
示例项目地址:https://github.com/whuanle/mcpdemo
郑子铭
2025/06/07
4920
工良出品 | 长文讲解 MCP 和案例实战
工良出品 | 长文讲解 MCP 和案例实战
示例项目地址:https://github.com/whuanle/mcpdemo
痴者工良
2025/04/22
1.8K1
工良出品 | 长文讲解 MCP 和案例实战
Java 实现 MCP Server 以及常用 MCP 服务分享
MCP 前段时间在 AI 领域 引发了 广泛关注,特别是在 各大海内外技术社区 中,大家热烈讨论,热度非常高,本文将带领大家使用 java 语言实现一个 mcp,揭开 mcp 这神秘的面纱,本文最后也推荐给大家一些常用的 MCP 服务,开箱即用 0 成本,希望对大家有一定的帮助。
Lcry
2025/04/24
5.8K6
Java 实现 MCP Server 以及常用 MCP 服务分享
MCP(Model Context Protocol)好比大模型外挂!
最近Anthropic主导发布了MCP(Model Context Protocol,模型上下文协议)后,着实真真火了一把。熟悉AI大模型的人对Anthropic应该不会陌生,Claude 3.5 Sonnet模型就是他们发布的,包括现在的最强编程AI模型 3.7 Sonnet。今天我们来刨析下什么是MCP,AI大模型下,需要MCP吗?
有一只柴犬
2025/03/23
8722
MCP(Model Context Protocol)好比大模型外挂!
创建图片生成MCP Server
正如前文提到的,我仍然需要一个图片生成的 MCP Server。参考 MCP 快速入门和 Gemini 文档,我发现实现起来应该不难。
云云众生s
2025/03/20
6220
构建基于 SSE 协议通信的 MCP Server 和 Client
在之前的系列教程中,我们编写的 MCP 服务器与 MCP 客户端是通过 stdio(Standard Input/Output,标准输入输出)来进行交互的。客户端通过启动服务器子进程,并利用标准输入(stdin)和标准输出(stdout)建立双向通信。这种模式导致 MCP 客户端与服务器之间存在强耦合,且每个服务器进程只能与启动它的客户端通信(1:1 的关系)。
Se7en258
2025/05/21
7030
构建基于 SSE 协议通信的 MCP Server 和 Client
在浏览器使用 MCP,纯边缘函数实现 MCP Client & Server
下面是一个在线示例:https://mcp-on-edge.edgeone.site/?from=eo
EdgeOne 小助手
2025/05/09
8600
必看!SpringAI轻松构建MCP Client-Server架构
MCP 这个概念相信大家已经听了无数次了,但不同人会有不同的解释,你可能也是听得云里雾里的。
磊哥
2025/03/30
8881
必看!SpringAI轻松构建MCP Client-Server架构
快速上手:实现你的第一个 MCP Client
在 MCP Server 开发实战:无缝对接 LLM 和 Elasticsearch 一文中,我们详细介绍了如何利用 MCP Python SDK 编写一个 Elasticsearch MCP 服务器,并通过 Claude Desktop 作为 MCP 客户端进行交互。本文将进一步介绍如何使用 MCP Python SDK 编写一个 MCP 客户端,以便更加灵活地与 MCP 服务器进行通信和集成。本文的完整代码可以在 Github 上找到:https://github.com/cr7258/hands-on-lab/tree/main/ai/claude/mcp/client/elasticsearch-mcp-client-example
Se7en258
2025/05/21
7340
快速上手:实现你的第一个 MCP Client
一文详解模型上下文协议(MCP):打通大模型与业务场景的关键
暂且抛开MCP,这23年的时候开始搭建AI Agent智能体,对第三方插件API进行交互的时候,我就开始设想能不能自己做一个通用代码协议框架,以后AI团队统一用这个协议,方便大家code review,更好协作。AI要触及到业务就必然逃不过与业务端接口或是数据进行联通,但是之前都没有标准的交互协议,需要理解各个三方接口和协议是比较费时的事情,但如果有类似像Java工程开发标准,那么我们就很方便开发第三方接口了,不会存在那么多不同开发形态的代码,方便维护。MCP协议出现之后发现大家都在慢慢融入到开源协议框架中,故而再对一些不了解MCP的朋友详细解述这一框架协议,以后必然是以开源协议为主导的代码生态。
fanstuck
2025/03/27
3K2
一文详解模型上下文协议(MCP):打通大模型与业务场景的关键
一文掌握 MCP 上下文协议:从理论到实践
应用能够安全、灵活地访问和操作本地及远程数据资源,提升模型的功能性和可扩展性。 ​
陈明勇
2025/04/02
4.1K8
一文掌握 MCP 上下文协议:从理论到实践
机器学习|MCP(Model Context Protocol)实战
MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。 官网的介绍: https://modelcontextprotocol.io/introduction
用户1904552
2025/04/13
9590
机器学习|MCP(Model Context Protocol)实战
大语言模型交互协议 MCP SDK Go-MCP 正式开源!
今天,ThinkInAI 团队(前身为 GoCN 团队)自豪地宣布,基于 Go 语言的大模型交互协议(Model Context Protocol)SDK —— Go-MCP 正式开源!
深度学习与Python
2025/04/10
1.8K0
大语言模型交互协议 MCP SDK Go-MCP 正式开源!
【译】微软与 Anthropic 合作为 MCP 创建官方 C# SDK
    微软正在与 Anthropic 合作,为模型上下文协议(MCP)创建一个官方的 C# SDK。MCP 已经在人工智能社区得到了迅速的应用,这次合作旨在增强人工智能模型与 C#应用程序的集成。
郑子铭
2025/06/28
580
【译】微软与 Anthropic 合作为 MCP 创建官方 C# SDK
[C#] 常用工具类——文件操作类
/// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在</para> /// <para> IsImgFilename:判断文件名是否为浏览器可以直接显示的图片文件名</para> /// <para> CopyFiles:复制指定目录的所有文件</para> /// <para> MoveFiles:移动指定目录的所有文件</para> /// <para> D
跟着阿笨一起玩NET
2018/09/19
2.7K0
PHP MCP 客户端 v1.0.0 发布!
PHP MCP Client是一个PHP库,用于与实现Model Context Protocol (MCP)的服务器进行交互。它为开发者提供了友好的接口,可通过不同的传输方式(stdio、http+sse)连接到单个MCP服务器,管理连接生命周期,发现服务器功能(工具、资源、提示),并执行诸如调用工具或读取资源等请求。
Tinywan
2025/05/08
2210
PHP MCP 客户端 v1.0.0 发布!
BotSharp + MCP 三步实现智能体开发
1. 简介 1.1 什么是MCP Model Context Protocol(MCP)模型上下文协议是一种标准化协议,它让大模型能够更容易地和外部的数据、工具
张善友
2025/04/05
3646
BotSharp + MCP 三步实现智能体开发
C#封装的常用文件操作代码类
这个C#类封装了我们经常能用到的文件操作方法,包括读写文件、获取文件扩展名、复制文件、追加内容到文件、删除文件、移动文件、创建目录、递归删除文件及目录、列目录、列文件等,不可多得。
用户7108768
2021/11/02
9460
相关推荐
如何把ASP.NET Core WebApi打造成Mcp Server
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验