checklist-mcp-server
Version:
An MCP server for hierarchical checklist management with HTTP streamable transport support.
75 lines (74 loc) • 2.56 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = __importDefault(require("express"));
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
const server_1 = require("./server");
const app = (0, express_1.default)();
// 使用express.raw()来保存原始请求体,然后手动解析JSON
// 这个修复解决了某些客户端连接时req.body为undefined的问题
app.use(express_1.default.raw({ type: 'application/json', limit: '10mb' }));
// 手动解析JSON
app.use((req, res, next) => {
if (req.body && Buffer.isBuffer(req.body)) {
try {
req.body = JSON.parse(req.body.toString('utf8'));
}
catch (error) {
console.error('JSON parse error:', error);
req.body = null;
}
}
next();
});
const MCP_ENDPOINT = "/mcp";
const PORT = process.env.PORT || 8585;
// Get the base checklist server
const mcpServer = (0, server_1.createChecklistServer)();
// 添加健康检查端点
app.get('/health', (req, res) => {
res.json({
status: 'ok',
timestamp: new Date().toISOString(),
server: 'checklist-mcp-server',
version: '1.2.0'
});
});
// 添加根路径处理
app.get('/', (req, res) => {
res.json({
message: 'Checklist MCP Server is running',
endpoint: MCP_ENDPOINT,
timestamp: new Date().toISOString()
});
});
app.post(MCP_ENDPOINT, async (req, res) => {
try {
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
// Note: We connect the single mcpServer instance to a new transport for each request.
await mcpServer.connect(transport);
await transport.handleRequest(req, res, req.body);
res.on('close', () => {
transport.close();
});
}
catch (error) {
console.error('Error handling MCP request:', error);
if (!res.headersSent) {
res.status(500).json({
jsonrpc: '2.0',
error: {
code: -32603,
message: 'Internal server error: ' + error.message,
},
id: req.body?.id || null,
});
}
}
});
app.listen(PORT, () => {
console.log(`Checklist MCP HTTP server running on port ${PORT}`);
});