nx-mcp-server 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/index.js +15 -6
- package/src/tools/handlers.js +1 -1
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -48,7 +48,10 @@ async function startHttp(){
|
|
|
48
48
|
const app=createMcpExpressApp({host:'0.0.0.0'});
|
|
49
49
|
const transports={};
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
// 包装 async handler,异常透传给 Express 错误中间件
|
|
52
|
+
const wrap=fn=>(req,res,next)=>fn(req,res).catch(next);
|
|
53
|
+
|
|
54
|
+
const mcpPostHandler=wrap(async (req,res)=>{
|
|
52
55
|
const sessionId=req.headers['mcp-session-id'];
|
|
53
56
|
let transport;
|
|
54
57
|
|
|
@@ -81,30 +84,36 @@ async function startHttp(){
|
|
|
81
84
|
return;
|
|
82
85
|
}
|
|
83
86
|
await transport.handleRequest(req,res,req.body);
|
|
84
|
-
};
|
|
87
|
+
});
|
|
85
88
|
|
|
86
|
-
const mcpGetHandler=async (req,res)=>{
|
|
89
|
+
const mcpGetHandler=wrap(async (req,res)=>{
|
|
87
90
|
const sessionId=req.headers['mcp-session-id'];
|
|
88
91
|
if(!sessionId||!transports[sessionId]){
|
|
89
92
|
res.status(400).send('无效或缺少 session ID');
|
|
90
93
|
return;
|
|
91
94
|
}
|
|
92
95
|
await transports[sessionId].handleRequest(req,res);
|
|
93
|
-
};
|
|
96
|
+
});
|
|
94
97
|
|
|
95
|
-
const mcpDeleteHandler=async (req,res)=>{
|
|
98
|
+
const mcpDeleteHandler=wrap(async (req,res)=>{
|
|
96
99
|
const sessionId=req.headers['mcp-session-id'];
|
|
97
100
|
if(!sessionId||!transports[sessionId]){
|
|
98
101
|
res.status(400).send('无效或缺少 session ID');
|
|
99
102
|
return;
|
|
100
103
|
}
|
|
101
104
|
await transports[sessionId].handleRequest(req,res);
|
|
102
|
-
};
|
|
105
|
+
});
|
|
103
106
|
|
|
104
107
|
app.post('/mcp',mcpPostHandler);
|
|
105
108
|
app.get('/mcp',mcpGetHandler);
|
|
106
109
|
app.delete('/mcp',mcpDeleteHandler);
|
|
107
110
|
|
|
111
|
+
// 全局错误处理 — 捕获 async handler 的异常
|
|
112
|
+
app.use((err,_req,res)=>{
|
|
113
|
+
console.error('[MCP HTTP Error]',err.message);
|
|
114
|
+
res.status(500).json({jsonrpc:'2.0',error:{code:-32603,message:err.message||'Internal error'},id:null});
|
|
115
|
+
});
|
|
116
|
+
|
|
108
117
|
app.get('/health',(_req,res)=>{res.json({status:'ok',uptime:process.uptime()});});
|
|
109
118
|
|
|
110
119
|
app.listen(PORT,()=>{
|
package/src/tools/handlers.js
CHANGED
|
@@ -3,7 +3,7 @@ import {compressImage} from '../nx-api.js';
|
|
|
3
3
|
// ===== 工具处理函数 =====
|
|
4
4
|
|
|
5
5
|
async function handleCompress(args){
|
|
6
|
-
return compressImage({urls:args.urls,files:args.files,quality:args.quality,output:args.output});
|
|
6
|
+
return compressImage({urls:args.urls,files:args.files,quality:args.quality,output:args.output,apiKey:args.apiKey});
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
// ===== 工具路由表 =====
|