pollo-mcp
Version:
Pollo AI Model Context Protocol (MCP) Server for video generation
98 lines (97 loc) • 4.63 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
import { program } from 'commander';
import express from 'express';
import MCPServerFactory from './lib/index.js';
const SERVER_NAME = 'pollo-mcp';
const SERVER_VERSION = '1.1.0';
function startStdIOServer(createServer) {
return __awaiter(this, void 0, void 0, function* () {
console.error('Starting default (STDIO) server...');
const transport = new StdioServerTransport();
const server = createServer();
yield server.connect(transport);
});
}
function startServerSSE(host, port, createServer) {
return __awaiter(this, void 0, void 0, function* () {
console.error('Starting SSE server...');
const app = express();
const transports = new Map();
app.get('/sse', (req, res) => __awaiter(this, void 0, void 0, function* () {
var _a, _b;
let transport;
const server = createServer();
if ((_a = req === null || req === void 0 ? void 0 : req.query) === null || _a === void 0 ? void 0 : _a.sessionId) {
const sessionId = (_b = req === null || req === void 0 ? void 0 : req.query) === null || _b === void 0 ? void 0 : _b.sessionId;
transport = transports.get(sessionId);
console.error("Client Reconnecting? This shouldn't happen; when client has a sessionId, GET /sse should not be called again.", transport.sessionId);
}
else {
// Create and store transport for new session
transport = new SSEServerTransport('/message', res);
transports.set(transport.sessionId, transport);
// Connect server to transport
yield server.connect(transport);
console.error('Client Connected: ', transport.sessionId);
// Handle close of connection
server.onclose = () => __awaiter(this, void 0, void 0, function* () {
console.error('Client Disconnected: ', transport.sessionId);
transports.delete(transport.sessionId);
});
}
}));
app.post('/message', (req, res) => __awaiter(this, void 0, void 0, function* () {
var _a;
const sessionId = (_a = req === null || req === void 0 ? void 0 : req.query) === null || _a === void 0 ? void 0 : _a.sessionId;
const transport = transports.get(sessionId);
if (transport) {
console.error('Client Message from', sessionId);
yield transport.handlePostMessage(req, res);
}
else {
console.error(`No transport found for sessionId ${sessionId}`);
}
}));
app.listen(port, host, () => {
console.error(`Server is running on ${host}:${port}`);
});
});
}
function main() {
return __awaiter(this, void 0, void 0, function* () {
program
.option('--sse', 'Start SSE Server')
.option('-h, --host <host>', 'The host of the mcp server', '127.0.0.1')
.option('-p, --port <port>', 'The port of the mcp server', '5000')
.parse();
const createServer = yield MCPServerFactory(SERVER_NAME, SERVER_VERSION);
const options = program.opts();
try {
if (options.sse) {
yield startServerSSE(options.host, Number(options.port), createServer);
}
else {
yield startStdIOServer(createServer);
}
}
catch (error) {
console.error('Error during server startup:', error);
process.exit(1);
}
});
}
main().catch((error) => {
console.error('Fatal error in main execution:', error);
process.exit(1);
});