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
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 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
;