項(xiàng)目說明
這是一個同時支持stdio,streamableHttpless和sse三種協(xié)議的MCP-Server的框架(ts語言)。
為什么我想做這個框架呢?因?yàn)殡S著AI發(fā)展,現(xiàn)在越來越多業(yè)務(wù)需要和AI相結(jié)合。而我在做AI應(yīng)用中發(fā)現(xiàn),MCP服務(wù)在AI方向的業(yè)務(wù)使用頻率很高,但隨著業(yè)務(wù)的加深,發(fā)現(xiàn)存在以下痛點(diǎn):
1.針對不同業(yè)務(wù),對于mcp-server需要的類型不同,有的就需要stdio,有的需要網(wǎng)絡(luò)請求
2.不同平臺對MCP服務(wù)協(xié)議要求不同,有支持streamableHttp,有僅支持sse的。
這兩種情況,會出現(xiàn)相同功能重復(fù)開發(fā),重復(fù)造輪子,浪費(fèi)時間成本
3. 此外,有些研發(fā)人員目前并不了解MCP,在業(yè)務(wù)開發(fā)時候需要現(xiàn)學(xué)
而這會讓研發(fā)周期加長,時間成本耗費(fèi)過多
所以為了解決以上痛點(diǎn),我從0-1搭建了這個框架。這個框架特點(diǎn):
1.同時支持stdio,streamableHttpless和sse三種模式,實(shí)現(xiàn)一次開發(fā)支持三種模式
2.所有功能都拆分為獨(dú)立模塊。這樣即使不懂的人,只要在指定的文件里面編寫業(yè)務(wù)邏輯,就可以創(chuàng)造自己的mcp服務(wù)
3.支持環(huán)境變量,可通過環(huán)境變量配置域名,服務(wù)地址,端口和host,真正適用于生產(chǎn)使用
4.切換模式也很簡單,只要在啟動腳本根據(jù)需要,切換啟動命令即可,改動成本近乎無
5.添加日志模塊,方便查閱啟動和服務(wù)調(diào)用情況
6.同時添加行云腳本,支持行云部署
github地址:https://github.com/XingtongCai/mcp-server-ts?
coding地址: http://xingyun.jd.com/codingRoot/jdcloud-fe/mcp-server/tree/main/demo
內(nèi)容介紹
整個框架的結(jié)構(gòu)很簡單,就如下這些:
## 目錄結(jié)構(gòu) - build: 編譯之后的文件 - src -- router: 配置streamableHttp和sse協(xié)議的路由 -- index.ts: 注冊streamableHttp路由入口 -- mcp.ts: streamableHttp的配置路徑,具體為`process.env.MCP_BASE_PATH`的路徑請求,如果沒有配置,默認(rèn)/mcp。如果有需要添加二級路徑,例如 /mcp/event,需要在這里面添加一下/event,如果一級不用動 -- sse.ts: sse的配置路徑,具體為`process.env.MCP_BASE_PATH`的路徑請求,如果沒有配置,默認(rèn)/mcp。如果有需要添加二級路徑,例如 /mcp/event,需要在這里面添加一下/event,如果一級不用動 -- tools: mcp的工具 -- index.ts: 注冊工具 -- mockFunc.ts: 模擬一個工具寫法 - 這部分需要根據(jù)業(yè)務(wù)開發(fā) -- cli.ts: 命令行解析工具 -- index.ts: 總?cè)肟? -- server.ts: 創(chuàng)建Mcp服務(wù) -- sse.ts: 運(yùn)行sse模式 -- stdio.ts: 運(yùn)行stdio模式 -- streamableHttp.ts: 運(yùn)行streamableHttp模式 - xingyun/bin : 是根據(jù)我們業(yè)務(wù)使用的部署工具開發(fā)的部署腳本 - 這部分需要根據(jù)實(shí)際部署平臺更改,我這個支持行云部署 - build_xingyun.sh: 是根據(jù)我們業(yè)務(wù)使用的部署工具開發(fā)的部署腳本 - 這部分需要根據(jù)實(shí)際部署平臺更改,我這個支持行云部署
啟動服務(wù)方式
a.本地啟動
1.啟動stdio: npm run start 是默認(rèn)啟動stdio
2.啟動StreamableHttp: npm run start:http 是默認(rèn)啟動端口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 是默認(rèn)啟動端口3001
?
b.部署啟動
我在 xingyun/bin/control.sh中寫的啟動腳本,這段代碼是啟動streamableHttpless的,如果需要啟動sse,需要改為 `npm run start:sse`
start(){
npm run start:http
sleep 3
status
}
生產(chǎn)環(huán)境配置
# 監(jiān)聽特定內(nèi)網(wǎng)IP(例如:192.168.1.100) export MCP_HOST=192.168.1.100 export MCP_PORT=3001 # 使用內(nèi)網(wǎng)域名(可選) export MCP_DOMAIN=mcp-server.internal.com # 修改基礎(chǔ)路徑(可選,默認(rèn)是 /mcp) export MCP_BASE_PATH=/api/mcp
### 端口配置優(yōu)先級 1. 環(huán)境變量 `MCP_PORT`(最高優(yōu)先級) 2. 命令行參數(shù) `--port` 3. 默認(rèn)值:3001端口 ### 訪問地址優(yōu)先級 1. 環(huán)境變量 `MCP_DOMAIN`(最高優(yōu)先級) 2. 環(huán)境變量 `MCP_HOST` 3. 默認(rèn): localhost
### 內(nèi)網(wǎng)訪問方式 假設(shè)你的內(nèi)網(wǎng)服務(wù)器IP是 `192.168.1.100`,端口是 `3001`: **基礎(chǔ)訪問:** ``` http://192.168.1.100:3001/sales ``` **帶域名的訪問:** ``` http://mcp-server.internal.com/sales ``` **自定義路徑:** ``` http://192.168.1.100:3001/api/mcp
?
項(xiàng)目關(guān)鍵代碼說明
這個是package.json文件,也是我們一開始要看的,`cli.js`這個文件是我們啟動文件,也是解析命令行的工具,真實(shí)區(qū)分的地方在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 的關(guān)鍵代碼,在這區(qū)分不同模式,然后進(jìn)入到各自的處理模塊。各自模塊就是調(diào)用sdk,配置域名等操作,代碼過長,不展示了,但是這幾個文件不用動。

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

server.ts 是創(chuàng)建mcp服務(wù),同時注冊tools工具,三個模式都需要使用的公共文件

tools/index.ts, 作為工具入口,一個工具一個注冊

router文件夾下路由注冊,是為了sse和streamableless的路由。

其中streamable的index.ts文件里面關(guān)鍵內(nèi)容,其中basePath就是你的基礎(chǔ)路徑,通過定義指定訪問路徑。

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

其實(shí)整個框架到這關(guān)鍵的代碼就說完了。剩下xingyun的就是在行云平臺部署和啟動需要的腳本,這里就不介紹了
?
成果展示
1.stdio - 發(fā)布了依賴包,并用joycode成功聯(lián)通
?https://npm.m.jd.com/package/@jd/demo-mcp-server

?
2.streamableHttp - joycode成功聯(lián)通并且可以運(yùn)行


?
3.sse - autobots支持sse模式,用這個框架開發(fā)了在業(yè)務(wù)中使用的 權(quán)限攔截MCP,并成功在autobots引入


審核編輯 黃宇
-
Stdio
+關(guān)注
關(guān)注
0文章
3瀏覽量
7732 -
MCP
+關(guān)注
關(guān)注
0文章
289瀏覽量
15009
發(fā)布評論請先 登錄
利用BigQuery MCP服務(wù)器開發(fā)面向數(shù)據(jù)分析的生成式AI應(yīng)用
MCP2551高速CAN收發(fā)器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)
本地部署微信公眾號文章搜索MCP服務(wù)并實(shí)現(xiàn)遠(yuǎn)程訪問
Microchip推出模型語境協(xié)議(MCP)服務(wù)器,助力AI驅(qū)動的產(chǎn)品數(shù)據(jù)訪問
最新MCP規(guī)范解讀,看這篇就夠了!
智能硬件通過小聆AI自定義MCP應(yīng)用開發(fā)操作講解
【內(nèi)測活動同步開啟】這么小?這么強(qiáng)?新一代大模型MCP開發(fā)板來啦!
【HZ-T536開發(fā)板免費(fèi)體驗(yàn)】5- 無需死記 Linux 命令!用 CangjieMagic 在 HZ-T536 開發(fā)板上搭建 MCP 服務(wù)器,自然語言輕松控板
技術(shù)解讀:MCP協(xié)議以及SmartBear API Hub在MCP開發(fā)中的關(guān)鍵作用
MCP2515同時收發(fā)出現(xiàn)bug
如何用FastMCP快速開發(fā)自己的MCP Server?
Claude 現(xiàn)已能連接您的世界 支持遠(yuǎn)程MCP服務(wù)器協(xié)作
一文詳解MCP傳輸機(jī)制
羅格科技全線產(chǎn)品支持MCP協(xié)議,構(gòu)建智慧稅務(wù)新生態(tài)
如何構(gòu)建MCP客戶端
【MCP】同時支持stdio,streamableHttpless和sse三種協(xié)議的MCP服務(wù)框架
評論