0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【MCP】同时支持stdio,streamableHttpless和sse三种协议的MCP服务框架

京东云 来源:jf_75140285 作者:jf_75140285 2026-01-21 18:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

项目说明

这是一个同时支持stdio,streamableHttpless和sse三种协议的MCP-Server的框架(ts语言)。

为什么我想做这个框架呢?因为随着AI发展,现在越来越多业务需要和AI相结合。而我在做AI应用中发现,MCP服务在AI方向的业务使用频率很高,但随着业务的加深,发现存在以下痛点:

1.针对不同业务,对于mcp-server需要的类型不同,有的就需要stdio,有的需要网络请求

2.不同平台对MCP服务协议要求不同,有支持streamableHttp,有仅支持sse的。

这两种情况,会出现相同功能重复开发,重复造轮子,浪费时间成本

3. 此外,有些研发人员目前并不了解MCP,在业务开发时候需要现学

而这会让研发周期加长,时间成本耗费过多

所以为了解决以上痛点,我从0-1搭建了这个框架。这个框架特点

1.同时支持stdio,streamableHttpless和sse三种模式,实现一次开发支持三种模式

2.所有功能都拆分为独立模块。这样即使不懂的人,只要在指定的文件里面编写业务逻辑,就可以创造自己的mcp服务

3.支持环境变量,可通过环境变量配置域名,服务地址,端口和host,真正适用于生产使用

4.切换模式也很简单,只要在启动脚本根据需要,切换启动命令即可,改动成本近乎无

5.添加日志模块,方便查阅启动和服务调用情况

6.同时添加行云脚本,支持行云部署

github地址:https://github.com/XingtongCai/mcp-server-ts

coding地址: http://xingyun.jd.com/codingRoot/jdcloud-fe/mcp-server/tree/main/demo

内容介绍

整个框架的结构很简单,就如下这些:

## 目录结构
- build: 编译之后的文件
- src
 -- router: 配置streamableHttp和sse协议的路由
   -- index.ts: 注册streamableHttp路由入口
   -- mcp.ts: streamableHttp的配置路径,具体为`process.env.MCP_BASE_PATH`的路径请求,如果没有配置,默认/mcp。如果有需要添加二级路径,例如 /mcp/event,需要在这里面添加一下/event,如果一级不用动
   -- sse.ts: sse的配置路径,具体为`process.env.MCP_BASE_PATH`的路径请求,如果没有配置,默认/mcp。如果有需要添加二级路径,例如 /mcp/event,需要在这里面添加一下/event,如果一级不用动
 -- tools: mcp的工具 
   -- index.ts: 注册工具
   -- mockFunc.ts: 模拟一个工具写法 - 这部分需要根据业务开发
 -- cli.ts: 命令行解析工具
 -- index.ts: 总入口
 -- server.ts: 创建Mcp服务
 -- sse.ts: 运行sse模式
 -- stdio.ts: 运行stdio模式
 -- streamableHttp.ts: 运行streamableHttp模式
- xingyun/bin : 是根据我们业务使用的部署工具开发的部署脚本 - 这部分需要根据实际部署平台更改,我这个支持行云部署
- build_xingyun.sh: 是根据我们业务使用的部署工具开发的部署脚本 - 这部分需要根据实际部署平台更改,我这个支持行云部署

启动服务方式

a.本地启动

1.启动stdio: npm run start 是默认启动stdio

2.启动StreamableHttp: npm run start:http 是默认启动端口3001

3.更改端口启动StreamableHttp: npm run dev:http 或者 npm run start -- -t http -p 3001

-t httt: 代表启动StreamableHttp

-p 3001: 代表启动端口3001

4.启动sse: npm run start:sse 是默认启动端口3001



b.部署启动

我在 xingyun/bin/control.sh中写的启动脚本,这段代码是启动streamableHttpless的,如果需要启动sse,需要改为 `npm run start:sse`

start(){
    npm run start:http
    sleep 3
    status
}

生产环境配置

# 监听特定内网IP(例如:192.168.1.100)
export MCP_HOST=192.168.1.100
export MCP_PORT=3001

# 使用内网域名(可选)
export MCP_DOMAIN=mcp-server.internal.com

# 修改基础路径(可选,默认是 /mcp)
export MCP_BASE_PATH=/api/mcp


### 端口配置优先级
1. 环境变量 `MCP_PORT`(最高优先级)
2. 命令行参数 `--port` 
3. 默认值:3001端口

### 访问地址优先级
1. 环境变量 `MCP_DOMAIN`(最高优先级)
2. 环境变量 `MCP_HOST`
3. 默认: localhost
### 内网访问方式
假设你的内网服务器IP是 `192.168.1.100`,端口是 `3001`:

**基础访问:**
```
http://192.168.1.100:3001/sales
```

**带域名的访问:**
```
http://mcp-server.internal.com/sales
```

**自定义路径:**
```
http://192.168.1.100:3001/api/mcp



项目关键代码说明

这个是package.json文件,也是我们一开始要看的,`cli.js`这个文件是我们启动文件,也是解析命令行的工具,真实区分的地方在index.ts文件中

"scripts": {
    "build": "tsc && chmod 755 build/src/index.js  build/src/cli.js",
    "start": "node ./build/src/cli.js",
    "start:http": "node ./build/src/cli.js --transport http",
    "start:sse": "node ./build/src/cli.js --transport sse",
    "dev:http": "node ./build/src/cli.js  --transport http --port 3002",
    "stop": "pkill -f "demo" || true",
    "restart": "npm run stop && npm run start:http",
    "inspector": "npx @modelcontextprotocol/inspector"
  },

index.ts 的关键代码,在这区分不同模式,然后进入到各自的处理模块。各自模块就是调用sdk,配置域名等操作,代码过长,不展示了,但是这几个文件不用动。

wKgZPGlwqbOANg-0AAJasNBAekc276.png

StreamableHttp.ts我支持的是less,就是我不需要sessionId,如果有需要的,这块需要再自己改一下!!

wKgZO2lwqbSATI54AAFTHUZsgug685.png

server.ts 是创建mcp服务,同时注册tools工具,三个模式都需要使用的公共文件

wKgZPGlwqbWAFNGyAAEfA4Q3WZ4133.png

tools/index.ts, 作为工具入口,一个工具一个注册

wKgZO2lwqbaAZkhIAAFlF9JJW4E507.png

router文件夹下路由注册,是为了sse和streamableless的路由。

wKgZPGlwqbaAHP3yAACb9Ibx-ZU585.png

其中streamable的index.ts文件里面关键内容,其中basePath就是你的基础路径,通过定义指定访问路径。

wKgZO2lwqbeAVmlyAAIg8iM0sts373.png

sse的在sse.ts文件中,定义了get和post的方法

wKgZPGlwqbiAa-dnAAKKdgl3f5w660.png

其实整个框架到这关键的代码就说完了。剩下xingyun的就是在行云平台部署和启动需要的脚本,这里就不介绍了



成果展示

1.stdio - 发布了依赖包,并用joycode成功联通

https://npm.m.jd.com/package/@jd/demo-mcp-server

wKgZO2lwqbiAaPqcAABZsKoUMnY600.png



2.streamableHttp - joycode成功联通并且可以运行

wKgZPGlwqbmAMZ9WAABkZYqHRUc133.png

wKgZO2lwqbqAV3QiAADwpgoHuW0782.png



3.sse - autobots支持sse模式,用这个框架开发了在业务中使用的 权限拦截MCP,并成功在autobots引入

wKgZPGlwqbqAezRPAAC7VZ75IxU817.png

wKgZO2lwqbuAHwj2AACeBS0JjzU855.png

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Stdio
    +关注

    关注

    0

    文章

    3

    浏览量

    7758
  • MCP
    MCP
    +关注

    关注

    0

    文章

    294

    浏览量

    15079
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MCP协议的设计原理和核心架构

    MCP(Model Context Protocol,模型上下文协议)是Anthropic在2024年底发布的开放协议,旨在为AI模型与外部工具、数据源建立标准化的通信方式。本文深入解析MCP
    的头像 发表于 04-22 14:56 207次阅读

    安信可AI语音模组支持MCP模型上下文协议

    安信可 PalChat 系列(V1/V2)支持 MCP(模型上下文协议),工程师只需写几十行 C 代码,就能让 AI 模型直接控制硬件设备。V1 基于 Ai-WB2-12F,适合快速验证;V2
    的头像 发表于 04-15 09:54 445次阅读

    MCP1630/MCP1630V高速脉宽调制器:设计与应用解析

    智能电源系统的开发提供了强大的支持。本文将深入探讨MCP1630/MCP1630V的特性、电气参数、工作原理以及典型应用,帮助电子工程师更好地理解和应用这款器件。 文件下载
    的头像 发表于 04-07 14:40 124次阅读

    MCP2542FD/4FD 和 MCP2542WFD/4WFD:高速CAN FD应用的理想之选

    MCP2542WFD/4WFD是为高速CAN FD应用设计的,通信速度最高可达8 Mbps。它能作为CAN协议控制器和物理总线之间的接口,为CAN协议控制器提供差分发送和接收能力,并且完全兼容ISO 11898 - 2:201
    的头像 发表于 03-29 16:55 1136次阅读

    MCP1827/MCP1827S:高性能1.5A LDO稳压器的深度解析

    MCP1827/MCP1827S:高性能1.5A LDO稳压器的深度解析 在电子设计领域,低压差线性稳压器(LDO)是一常见且关键的组件,它能够为各种电子设备提供稳定的电源。MCP
    的头像 发表于 03-25 14:30 195次阅读

    利用BigQuery MCP服务器开发面向数据分析的生成式AI应用

    器。借助 BigQuery MCP 服务器,您现在可以为 AI 智能体提供一直接且安全的数据分析方式。这一全托管式 MCP 服务器不会带来
    的头像 发表于 02-25 10:22 447次阅读
    利用BigQuery <b class='flag-5'>MCP</b><b class='flag-5'>服务</b>器开发面向数据分析的生成式AI应用

    本地部署微信公众号文章搜索MCP服务并实现远程访问

    本文介绍如何在本地部署基于FastAPI的微信公众号文章搜索MCP服务,并通过内网穿透实现公网访问,支持关键词搜索。
    的头像 发表于 01-12 14:58 1050次阅读
    本地部署微信公众号文章搜索<b class='flag-5'>MCP</b><b class='flag-5'>服务</b>并实现远程访问

    Microchip推出模型语境协议MCP服务器,助力AI驱动的产品数据访问

    )今日推出模型语境协议MCP服务器。作为AI接口,MCP服务器可直接连接兼容的AI工具和大型语言模型,为其提供解答问题所需的上下文信息。
    的头像 发表于 12-04 16:45 1175次阅读

    最新MCP规范解读,看这篇就够了!

    ,不同团队重复造轮子。 Model Context Protocol(MCP) 就是为了解决这个问题而生的开放标准协议。 通俗理解 : MCP就像是「AI应用的USB接口标准」。就像USB让不同设备
    的头像 发表于 11-12 16:29 1615次阅读
    最新<b class='flag-5'>MCP</b>规范解读,看这篇就够了!

    智能硬件通过小聆AI自定义MCP应用开发操作讲解

    的可维护性;同时,统一的协议规范增强了数据传输的稳定性与安全性,有助于智能硬件在物联网场景中实现高效、可靠的信息交互,加速设备智能化与互联化进程。 智能硬件通过小聆AI对接MCP服务
    发表于 10-14 15:50

    【内测活动同步开启】这么小?这么强?新一代大模型MCP开发板来啦!

    精准识别用户身份;构建用户画像,记录兴趣与偏好;支持长期记忆,越用越懂你。 端云 MCP 服务支持配置StreamableHTTP / SSE
    发表于 09-25 11:47

    【HZ-T536开发板免费体验】5- 无需死记 Linux 命令!用 CangjieMagic 在 HZ-T536 开发板上搭建 MCP 服务器,自然语言轻松控板

    GPIO 等),并返回结果。 Cangjie Magic 角色 :构建MCP服务器,同时提供自然语言理解能力,将用户输入的文本(如 “查看开发板 IP 地址”“点亮 LED1”)转换为机器可识别的指令(如
    发表于 08-23 13:10

    技术解读:MCP协议以及SmartBear API Hub在MCP开发中的关键作用

    MCP协议正成为AI集成的“基础设施”。本文将带你认识这一“AI界的USB-C”,并梳理SmartBear API Hub如何通过契约测试、双向验证和代码生成,真正加速MCP开发。
    的头像 发表于 08-21 14:41 1499次阅读
    技术解读:<b class='flag-5'>MCP</b><b class='flag-5'>协议</b>以及SmartBear API Hub在<b class='flag-5'>MCP</b>开发中的关键作用

    MCP2515同时收发出现bug

    MCP2515,产生接收缓冲器溢出中断,导致无法接受数据,如何处理
    发表于 05-10 15:08

    Claude 现已能连接您的世界 支持远程MCP服务器协作

    支持本地 MCP)。  ” Claude 推出 Integrations(集成中心) 功能,为您的应用程序和工具提供连接 Claude 的全新方式。同时,通过增加网络搜索、Google
    的头像 发表于 05-02 11:11 1106次阅读