nx-mcp-server 1.0.7 → 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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +15 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx-mcp-server",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "NX MCP Server — 远程图片压缩 MCP 工具",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
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
- const mcpPostHandler=async (req,res)=>{
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,()=>{