MCP服务器引擎

MCPNet是一个轻量级的MCP兼容扩展实现,用于构建MCP请求管道、工具自动发现和JSON-RPC风格请求处理,适用于教育和小型项目。

  • by kwojtasinski-repo
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 kwojtasinski-repo/MCPNet

使用说明

MCPNet——最小爱好MCP服务器(C#)

状态: 爱好项目——尚未投入生产 目的: 简单、轻量级、教育性的实现 C#中的MCP兼容扩展。

该项目演示了:-使用以下组件构建MCP请求管道 中间件

  • 一个具有自动发现功能的简单工具注册表
  • JSON-RPC——样式请求处理(初始化、工具/列表、工具/调用)
  • 一个讲MCP兼容帧消息的小型TCP服务器示例 (Content-Length 协议)

❗ 这个项目实际上是什么

MCPNet本身并不是一个完整的网络服务器。

相反,它是一个MCP处理引擎(中间件管道+协议处理程序+工具系统),您可以在您选择的任何传输中托管它:

  • TCP(包括示例)
  • 超文本传输协议
  • 双向通信
  • stdio(如官方MCP服务器)
  • 海关运输

这是有意的:MCP规范没有规定传输, 因此MCPNet保持网络可选性和轻量级。

您仍然可以称之为MCP服务器,因为它处理MCP请求并生成MCP响应-- 但是托管层是用户提供的。


🚀 特性

  • ✔ 中间件管道(IMcpMiddleware)
  • ✔ 具有特征收集的上下文系统
  • ✔ 通过以下方式发现工具 [McpTool] 属性
  • ✔ 异步工具执行(Run 或 RunAsync)
  • ✔ 工具参数的JSON模式自动生成
  • ✔ MCP协议支持:
    • mcp.initialize
    • tools/list
    • tools/call

📦 示例工具

[McpTool("echo")]
public class EchoTool
{
    public string Run(EchoArgs args) => args.Text;
}

public class EchoArgs
{
    public string Text { get; set; } = "";
}

🧩 注册MCP服务器

var services = new ServiceCollection();
services.AddMcpServer()
        .AddMcpTool<EchoTool>();

var sp = services.BuildServiceProvider();
var processor = sp.GetRequiredService<McpProcessor>();

🔌 最小TCP主机

该项目包括一个小型框架消息TCP服务器:

var listener = new TcpListener(IPAddress.Loopback, 5005);
listener.Start();

while (true)
{
    var client = await listener.AcceptTcpClientAsync();
    _ = HandleClient(client, processor);
}

它使用MCP帧:

Content-Length: <bytes>

{json}

🧪 Node.js测试客户端

send({ jsonrpc: "2.0", id: 1, method: "mcp.initialize", params: {} });
send({ jsonrpc: "2.0", id: 2, method: "tools/list", params: {} });
send({
    jsonrpc: "2.0", id: 3, method: "tools/call",
    params: { tool: "echo", arguments: { text: "hello" } }
});

📚 项目目标

  • 从头开始构建MCP来学习它
  • 提供极小、可读的参考代码
  • 不打算取代完整的MCP堆栈或符合官方规范1:1

📄 许可证

麻省理工学院