项目说明
这是一个同时支持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,配置域名等操作,代码过长,不展示了,但是这几个文件不用动。

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

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

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

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

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

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

其实整个框架到这关键的代码就说完了。剩下xingyun的就是在行云平台部署和启动需要的脚本,这里就不介绍了
成果展示
1.stdio - 发布了依赖包,并用joycode成功联通
https://npm.m.jd.com/package/@jd/demo-mcp-server

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


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


审核编辑 黄宇
-
Stdio
+关注
关注
0文章
3浏览量
7758 -
MCP
+关注
关注
0文章
294浏览量
15079
发布评论请先 登录
MCP协议的设计原理和核心架构
安信可AI语音模组支持MCP模型上下文协议
MCP1630/MCP1630V高速脉宽调制器:设计与应用解析
MCP2542FD/4FD 和 MCP2542WFD/4WFD:高速CAN FD应用的理想之选
MCP1827/MCP1827S:高性能1.5A LDO稳压器的深度解析
利用BigQuery MCP服务器开发面向数据分析的生成式AI应用
Microchip推出模型语境协议(MCP)服务器,助力AI驱动的产品数据访问
最新MCP规范解读,看这篇就够了!
智能硬件通过小聆AI自定义MCP应用开发操作讲解
【内测活动同步开启】这么小?这么强?新一代大模型MCP开发板来啦!
【HZ-T536开发板免费体验】5- 无需死记 Linux 命令!用 CangjieMagic 在 HZ-T536 开发板上搭建 MCP 服务器,自然语言轻松控板
技术解读:MCP协议以及SmartBear API Hub在MCP开发中的关键作用
【MCP】同时支持stdio,streamableHttpless和sse三种协议的MCP服务框架
评论