Skip to main content
Glama

Gemini CLI MCP Server

by Artegy
server.ts3.23 kB
#!/usr/bin/env node import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; import { comprehensiveReviewTool, handleComprehensiveReview } from './tools/comprehensive-review.js'; import { targetedAnalysisTool, handleTargetedAnalysis } from './tools/targeted-analysis.js'; const SERVER_NAME = 'gemini-cli-mcp'; const SERVER_VERSION = '1.0.0'; class GeminiMCPServer { private server: Server; constructor() { this.server = new Server( { name: SERVER_NAME, version: SERVER_VERSION, }, { capabilities: { tools: {}, }, } ); this.setupToolHandlers(); this.setupErrorHandling(); } private setupToolHandlers(): void { // List available tools this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ comprehensiveReviewTool, targetedAnalysisTool, ], }; }); // Handle tool calls this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { switch (name) { case 'gemini_comprehensive_review': return await handleComprehensiveReview(args); case 'gemini_targeted_analysis': return await handleTargetedAnalysis(args); default: throw new Error(`Unknown tool: ${name}`); } } catch (error) { console.error(`Error handling tool ${name}:`, error); return { content: [ { type: 'text', text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`, }, ], isError: true, }; } }); } private setupErrorHandling(): void { this.server.onerror = (error) => { console.error('[MCP Error]', error); }; process.on('SIGINT', async () => { console.log('\nShutting down Gemini MCP server...'); await this.server.close(); process.exit(0); }); } async run(): Promise<void> { const transport = new StdioServerTransport(); await this.server.connect(transport); console.error(`Gemini CLI MCP server running on stdio`); console.error(`Server: ${SERVER_NAME} v${SERVER_VERSION}`); console.error('Available tools:'); console.error('- gemini_comprehensive_review: Full codebase analysis'); console.error('- gemini_targeted_analysis: Focused component analysis'); } } // Main execution async function main(): void { const server = new GeminiMCPServer(); await server.run(); } // Handle uncaught errors process.on('uncaughtException', (error) => { console.error('Uncaught exception:', error); process.exit(1); }); process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled rejection at:', promise, 'reason:', reason); process.exit(1); }); // Run the server main().catch((error) => { console.error('Failed to start server:', error); process.exit(1); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Artegy/gemini-cli-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server