UNPKG

cursor-background-agent-mcp-server

Version:

MCP Server for Cursor Background Agents API - run autonomous coding agents from any MCP client

75 lines 3.36 kB
"use strict"; 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 manifestController_1 = require("./presentation/manifestController"); const toolInvocationController_1 = require("./presentation/toolInvocationController"); const resourceAccessController_1 = require("./presentation/resourceAccessController"); const cursorApiClient_1 = require("./infrastructure/cursorApiClient"); const toolExecutionService_1 = require("./application/toolExecutionService"); const errors_1 = require("./domain/errors"); const apiKey = process.env.CURSOR_API_KEY; if (!apiKey) { throw new Error("CURSOR_API_KEY environment variable is required"); } const cursorClient = new cursorApiClient_1.HttpCursorApiClient(apiKey); const toolExecutionService = new toolExecutionService_1.CursorToolExecutionService(cursorClient); (0, toolInvocationController_1.setToolExecutor)(toolExecutionService); const app = (0, express_1.default)(); app.use(express_1.default.json()); app.get('/manifest', async (req, res) => { try { const manifest = await (0, manifestController_1.getManifest)(); res.json(manifest); } catch (err) { const errorResponse = (0, errors_1.createMCPErrorResponse)(err); const statusCode = (0, errors_1.getHttpStatusForMCPError)(err); res.status(statusCode).json(errorResponse); } }); app.post('/tool-invoke', async (req, res) => { const { tool, input } = req.body; try { if (!tool || typeof tool !== "string") { return res.status(400).json({ error: "Missing or invalid 'tool' parameter" }); } if (typeof input !== "object" || input === null) { return res.status(400).json({ error: "Missing or invalid 'input' parameter" }); } const result = await (0, toolInvocationController_1.invokeTool)(tool, input); return res.json(result); } catch (err) { const errorResponse = (0, errors_1.createMCPErrorResponse)(err); const statusCode = (0, errors_1.getHttpStatusForMCPError)(err); return res.status(statusCode).json(errorResponse); } }); app.post('/resource', async (req, res) => { const { resource, params } = req.body; try { if (!resource || typeof resource !== "string") { return res.status(400).json({ error: "Missing or invalid 'resource' parameter" }); } const result = await (0, resourceAccessController_1.accessResource)(resource, params); return res.json(result); } catch (err) { const errorResponse = (0, errors_1.createMCPErrorResponse)(err); const statusCode = (0, errors_1.getHttpStatusForMCPError)(err); return res.status(statusCode).json(errorResponse); } }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`MCP Cursor Background Agents server running on port ${PORT}`); console.log(`Endpoints:`); console.log(` GET /manifest - Get available tools and resources`); console.log(` POST /tool-invoke - Invoke a tool`); console.log(` POST /resource - Access a resource`); }); exports.default = app; //# sourceMappingURL=server.js.map