import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { createClient } from './gemini-client.js';
import { register as registerGenerateText } from './tools/generate-text.js';
import { register as registerChat } from './tools/chat.js';
import { register as registerGenerateWithSearch } from './tools/generate-with-search.js';
import { register as registerCodeExecution } from './tools/code-execution.js';
import { register as registerGenerateImage } from './tools/generate-image.js';
import { register as registerEditImage, registerMulti as registerEditImageMulti } from './tools/edit-image.js';
const GEMINI_API_KEY = process.env.GEMINI_API_KEY;
if (!GEMINI_API_KEY) {
console.error('GEMINI_API_KEY environment variable is required');
process.exit(1);
}
const ai = createClient(GEMINI_API_KEY);
const server = new McpServer(
{ name: 'gemini', version: '2.0.0' },
{ capabilities: { logging: {} } },
);
// Register all 7 tools
registerGenerateText(server, ai);
registerChat(server, ai);
registerGenerateWithSearch(server, ai);
registerCodeExecution(server, ai);
registerGenerateImage(server, ai);
registerEditImage(server, ai);
registerEditImageMulti(server, ai);
// Start stdio transport
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('Gemini MCP server v2.0 running on stdio');
// Graceful shutdown
function shutdown() {
server.close().catch(() => {});
process.exit(0);
}
process.on('SIGINT', shutdown);
process.on('SIGTERM', shutdown);