MCP Gemini Server

by amitsh06
Verified
# MCP Gemini Server A server implementation of the Model Context Protocol (MCP) to enable AI assistants like Claude to interact with Google's Gemini API. ## Project Overview This project implements a server that follows the Model Context Protocol, allowing AI assistants to communicate with Google's Gemini models. With this MCP server, AI assistants can request text generation, text analysis, and maintain chat conversations through the Gemini API. ## Features - **Client-Server Communication**: Implements MCP protocol for secure message exchange between client and server. - **Message Processing**: Handles and processes client requests, sending appropriate responses. - **Error Handling & Logging**: Logs server activities and ensures smooth error recovery. - **Environment Variables Support**: Uses `.env` file for storing sensitive information securely. - **API Testing & Debugging**: Supports manual and automated testing using Postman and test scripts. ## Installation ### Prerequisites - Python 3.7 or higher - Google AI API key ### Setup 1. Clone this repository: ```bash git clone https://github.com/yourusername/mcp-gemini-server.git cd mcp-gemini-server ``` 2. Create a virtual environment: ```bash python -m venv venv ``` 3. Activate the virtual environment: - Windows: `venv\Scripts\activate` - macOS/Linux: `source venv/bin/activate` 4. Install dependencies: ```bash pip install -r requirements.txt ``` 5. Create a `.env` file in the root directory with your Gemini API key: ``` GEMINI_API_KEY=your_api_key_here ``` ## Usage 1. Start the server: ```bash python server.py ``` 2. The server will run on `http://localhost:5000/` by default 3. Send MCP requests to the `/mcp` endpoint using POST method ### Example Request ```python import requests url = 'http://localhost:5000/mcp' payload = { 'action': 'generate_text', 'parameters': { 'prompt': 'Write a short poem about AI', 'temperature': 0.7 } } response = requests.post(url, json=payload) print(response.json()) ``` ## API Reference ### Endpoints - `GET /health`: Check if the server is running - `GET /list-models`: List available Gemini models - `POST /mcp`: Main endpoint for MCP requests ### MCP Actions #### 1. generate_text Generate text content with Gemini. **Parameters:** - `prompt` (required): The text prompt for generation - `temperature` (optional): Controls randomness (0.0 to 1.0) - `max_tokens` (optional): Maximum tokens to generate **Example:** ```json { "action": "generate_text", "parameters": { "prompt": "Write a short story about a robot", "temperature": 0.8, "max_tokens": 500 } } ``` #### 2. analyze_text Analyze text content. **Parameters:** - `text` (required): The text to analyze - `analysis_type` (optional): Type of analysis ('sentiment', 'summary', 'keywords', or 'general') **Example:** ```json { "action": "analyze_text", "parameters": { "text": "The weather today is wonderful! I love how the sun is shining.", "analysis_type": "sentiment" } } ``` #### 3. chat Have a conversation with Gemini. **Parameters:** - `messages` (required): Array of message objects with 'role' and 'content' - `temperature` (optional): Controls randomness (0.0 to 1.0) **Example:** ```json { "action": "chat", "parameters": { "messages": [ {"role": "user", "content": "Hello, how are you?"}, {"role": "assistant", "content": "I'm doing well! How can I help?"}, {"role": "user", "content": "Tell me about quantum computing"} ], "temperature": 0.7 } } ``` ## Error Handling The server returns appropriate HTTP status codes and error messages: - `200`: Successful request - `400`: Bad request (missing or invalid parameters) - `500`: Server error (API issues, etc.) ## Testing Use the included test script to test various functionalities: ```bash # Test all functionalities python test_client.py # Test specific functionality python test_client.py text # Test text generation python test_client.py analyze # Test text analysis python test_client.py chat # Test chat functionality ``` ## MCP Protocol Specification The Model Context Protocol implemented here follows these specifications: 1. **Request Format**: - `action`: String specifying the operation - `parameters`: Object containing action-specific parameters 2. **Response Format**: - `result`: Object containing the operation result - `error`: String explaining any error (when applicable) ## License MIT License