项目简介
本项目是一个基于 Model Context Protocol (MCP) 的服务器端实现,采用了 Streamable HTTP 传输协议,并使用 TypeScript 语言开发。它旨在为大型语言模型(LLM)客户端提供一个标准化的上下文服务后端,支持资源管理、工具调用和 Prompt 模板等核心 MCP 功能。此项目提供了一个快速搭建可扩展、安全的 MCP 服务器的起点。
主要功能点
- MCP 协议支持: 实现了 MCP 协议的核心服务端功能,包括处理客户端请求、返回 JSON-RPC 响应以及发送服务器通知。
- Streamable HTTP 传输: 采用 Streamable HTTP 协议进行数据传输,支持高效的双向通信。
- 资源管理: 虽然示例代码中没有直接体现资源管理,但项目结构和 MCP 定义表明具备扩展资源管理能力的基础。
- 工具注册与调用: 支持注册和执行外部工具,示例中提供了 'greet' 和 'multi-greet' 两个工具,演示了工具调用的基本流程和通知机制。
- Prompt 模板: 项目具备定义和渲染 Prompt 模板的潜力,但示例代码中未直接展示 Prompt 模板功能,需要进一步扩展。
- 会话管理: 完整版 'index.ts' 实现了基于 'mcp-session-id' 的会话管理,允许客户端保持会话状态,'index-no-session.ts' 则是不支持会话管理的版本。
- 能力声明: 服务器启动时声明自身 capabilities,例如 logging 和 tools 功能。
- 可扩展性: 项目基于 Express 框架搭建,易于扩展和集成其他中间件,满足更复杂的需求。
安装步骤
-
克隆仓库: 将 GitHub 仓库 'https://github.com/ferrants/mcp-streamable-http-typescript-server' 克隆到本地。
-
安装依赖: 在项目根目录下运行命令 'npm install' 安装项目依赖。
-
构建项目: 运行命令 'npm run build' 使用 TypeScript 编译器构建项目。
-
启动服务器: 运行命令 'node build/index.js' 启动 MCP 服务器。默认端口为 '3000'。
- 可选:通过设置环境变量 'PORT' 自定义端口,例如 'PORT=3002 node build/index.js'。
服务器配置 (MCP 客户端配置)
MCP 客户端需要配置连接到此 MCP 服务器的信息。以下是一个 'mcp-config.json' 示例,客户端应根据实际情况进行配置:
{ "mcpServers": { "streamable-mcp-server": { // 服务器名称,客户端用于标识 "type": "streamable-http", // 连接类型,必须设置为 "streamable-http" "url": "http://localhost:3000" // MCP 服务器的 URL 地址,根据服务器实际运行地址和端口修改 } } }
配置参数说明:
- 'mcpServers': 配置 MCP 服务器列表。
- '"streamable-mcp-server"': 自定义的服务器名称,客户端在引用该服务器时使用。
- 'type': 连接类型,对于此 Streamable HTTP 服务器,必须设置为 '"streamable-http"'。
- 'url': MCP 服务器的 URL 地址。
- 如果服务器运行在本地,且端口为默认的 '3000',则使用 'http://localhost:3000'。
- 如果服务器运行在远程服务器或使用了不同的端口,请将 'localhost' 替换为服务器的 IP 地址或域名,并将 '3000' 替换为实际端口号。
基本使用方法
-
启动 MCP 服务器: 按照 "安装步骤" 中的说明启动服务器。
-
配置 MCP 客户端: 根据 "服务器配置" 中的示例,配置 MCP 客户端的 'mcp-config.json' 文件,确保 'url' 指向正在运行的 MCP 服务器地址。
-
客户端发起 MCP 请求: 使用 MCP 客户端 SDK,根据 MCP 协议规范,向配置的 MCP 服务器发送请求,例如调用已注册的工具。服务器会处理请求并返回响应或发送通知。
- 示例代码中提供了 'greet' 和 'multi-greet' 两个工具,客户端可以尝试调用这些工具进行测试。
- 可以通过查看服务器控制台输出来监控请求和响应信息。
信息
分类
AI与计算