创建一个 stdio 服务器

⚠️ 重要更新:根据 MCP 规范 2025-06-18 版本,独立的 SSE(服务器发送事件)传输方式已被弃用,取而代之的是“可流式 HTTP”(Streamable HTTP)传输。当前 MCP 规范定义了两种主要的传输机制:

  • stdio:标准输入/输出(推荐用于本地服务器)
  • Streamable HTTP:用于可能在内部使用 SSE 的远程服务器

本课程已更新,重点介绍推荐的 stdio 传输方式,这也是大多数 MCP 服务器实现所建议采用的方法。

stdio 传输允许 MCP 服务器通过标准输入和输出流与客户端通信。这是当前 MCP 规范中最常用且推荐的传输机制,提供了一种简单高效的方式来构建 MCP 服务器,并能轻松与各种客户端应用集成。

概述

本课程将介绍如何使用 stdio 传输构建和使用 MCP 服务器。

学习目标

完成本课程后,您将能够:

  • 使用 stdio 传输构建 MCP 服务器。
  • 使用 Inspector 调试 MCP 服务器。
  • 在 Visual Studio Code 中使用 MCP 服务器。
  • 理解当前 MCP 传输机制以及推荐使用 stdio 的原因。

stdio 传输 - 工作原理

stdio 传输是当前 MCP 规范(2025-06-18)支持的两种传输类型之一。其工作原理如下:

  • 简单通信:服务器从标准输入(stdin)读取 JSON-RPC 消息,并将消息发送到标准输出(stdout)。
  • 基于进程:客户端将 MCP 服务器作为子进程启动。
  • 消息格式:消息是单独的 JSON-RPC 请求、通知或响应,以换行符分隔。
  • 日志记录:服务器可以将 UTF-8 字符串写入标准错误(stderr)用于日志记录。

关键要求:

  • 消息必须以换行符分隔,且不得包含嵌入的换行符。
  • 服务器不得向 stdout 写入任何非 MCP 消息的内容。
  • 客户端不得向服务器的 stdin 写入任何非 MCP 消息的内容。

.NET stdio 服务器示例

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Server;
using System.ComponentModel;

var builder = Host.CreateApplicationBuilder(args);

builder.Services
    .AddMcpServer()
    .WithStdioTransport()
    .WithTools<Tools>();

var app = builder.Build();
await app.RunAsync();

public class Tools
{
    [Description("Get a personalized greeting")]
    public string GetGreeting(string name)
    {
        return $"Hello, {name}! Welcome to MCP stdio server.";
    }

    [Description("Calculate the sum of two numbers")]
    public int CalculateSum(int a, int b)
    {
        return a + b;
    }
}

要创建 stdio 服务器,我们需要:

  1. 导入所需的库 - 我们需要 MCP 服务器组件和 stdio 传输。
  2. 创建服务器实例 - 定义服务器及其功能。
  3. 定义工具 - 添加我们希望公开的功能。
  4. 设置传输 - 配置 stdio 通信。
  5. 运行服务器 - 启动服务器并处理消息。

与已弃用的 SSE 方法的主要区别

Stdio 传输(当前标准):

  • 简单的子进程模型 - 客户端将服务器作为子进程启动。
  • 使用 JSON-RPC 消息通过 stdin/stdout 通信。
  • 不需要设置 HTTP 服务器。
  • 性能和安全性更高。
  • 更易于调试和开发。

SSE 传输(自 MCP 2025-06-18 起弃用):

  • 需要带有 SSE 端点的 HTTP 服务器。
  • 需要更复杂的 Web 服务器基础设施设置。
  • 对 HTTP 端点有额外的安全性考虑。
  • 现已被可流式 HTTP 替代,用于基于 Web 的场景。

关键要点

本章的关键要点如下:

  • stdio 传输是本地 MCP 服务器的推荐机制。
  • stdio 传输允许 MCP 服务器和客户端通过标准输入和输出流无缝通信。
  • 您可以直接使用 Inspector 和 Visual Studio Code 消费 stdio 服务器,使调试和集成变得简单。
posted @ 2025-09-16 16:16  菜鸟吊思  阅读(24)  评论(0)    收藏  举报