context-optimizer-mcp-server
Version:
Context optimization tools MCP server for AI coding assistants - compatible with GitHub Copilot, Cursor AI, and other MCP-supporting assistants
179 lines (176 loc) • 6.88 kB
JavaScript
/**
* Context Optimizer MCP Server
*
* A standalone Model Context Protocol server that provides context optimization tools
* for AI coding assistants including GitHub Copilot, Cursor AI, Claude Desktop, and others.
*
* This server provides the same functionality as the VS Code extension but with
* universal compatibility through the MCP standard.
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
const path = __importStar(require("path"));
const fs = __importStar(require("fs"));
// Read package.json for version information
const packageJsonPath = path.join(__dirname, '..', 'package.json');
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
const VERSION = packageJson.version;
const manager_1 = require("./config/manager");
const logger_1 = require("./utils/logger");
const askAboutFile_1 = require("./tools/askAboutFile");
const runAndExtract_1 = require("./tools/runAndExtract");
const askFollowUp_1 = require("./tools/askFollowUp");
const researchTopic_1 = require("./tools/researchTopic");
const deepResearch_1 = require("./tools/deepResearch");
class ContextOptimizerMCPServer {
server;
tools;
constructor() {
this.server = new index_js_1.Server({
name: 'context-optimizer-mcp-server',
version: VERSION,
description: 'Context optimization tools for AI coding assistants - askAboutFile, runAndExtract, research tools - compatible with GitHub Copilot, Cursor AI, and other MCP-supporting assistants'
}, {
capabilities: {
tools: {}
}
});
this.tools = new Map();
this.setupTools();
this.setupHandlers();
}
setupTools() {
const toolInstances = [
new askAboutFile_1.AskAboutFileTool(),
new runAndExtract_1.RunAndExtractTool(),
new askFollowUp_1.AskFollowUpTool(),
new researchTopic_1.ResearchTopicTool(),
new deepResearch_1.DeepResearchTool()
];
for (const tool of toolInstances) {
this.tools.set(tool.name, tool);
}
logger_1.Logger.info(`Registered ${this.tools.size} tools: ${Array.from(this.tools.keys()).join(', ')}`);
}
setupHandlers() {
this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
return {
tools: Array.from(this.tools.values()).map(tool => tool.toMCPTool())
};
});
this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
const tool = this.tools.get(name);
if (!tool) {
throw new Error(`Unknown tool: ${name}`);
}
try {
const result = await tool.execute(args);
return result;
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
logger_1.Logger.error(`Tool execution error [${name}]:`, error);
return {
content: [{
type: 'text',
text: `❌ **Tool Error**: ${errorMessage}`
}],
isError: true,
errorMessage
};
}
});
}
async start() {
const transport = new stdio_js_1.StdioServerTransport();
await this.server.connect(transport);
logger_1.Logger.info('Context Optimizer MCP Server started');
}
}
// Main entry point
async function main() {
// Handle CLI arguments
const args = process.argv.slice(2);
if (args.includes('--version') || args.includes('-v')) {
console.log(VERSION);
process.exit(0);
}
if (args.includes('--help') || args.includes('-h')) {
console.log(`
Context Optimizer MCP Server v${VERSION}
Usage: context-optimizer-mcp [options]
Options:
--version, -v Show version number
--help, -h Show help information
This is an MCP (Model Context Protocol) server that provides context optimization tools
for AI coding assistants. It should be configured in your AI assistant's MCP settings.
For setup instructions, see: https://github.com/malaksedarous/context-optimizer-mcp-server
`);
process.exit(0);
}
try {
logger_1.Logger.debug('Loading configuration...');
await manager_1.ConfigurationManager.loadConfiguration();
logger_1.Logger.debug('Starting MCP server...');
const server = new ContextOptimizerMCPServer();
await server.start();
}
catch (error) {
logger_1.Logger.error('Failed to start MCP server:', error);
process.exit(1);
}
}
// Handle graceful shutdown
process.on('SIGINT', () => {
logger_1.Logger.info('Shutting down MCP server...');
process.exit(0);
});
process.on('SIGTERM', () => {
logger_1.Logger.info('Shutting down MCP server...');
process.exit(0);
});
if (require.main === module) {
main().catch((error) => {
logger_1.Logger.error('Fatal error:', error);
process.exit(1);
});
}
//# sourceMappingURL=server.js.map
;