Skip to main content
Glama
README.md
# MCP Server dengan Google AI Studio

Server FastAPI yang menyediakan berbagai tools dan integrasi dengan Google Gemini AI.

## Fitur

- **Auto Tool Router**: Routing otomatis ke tool yang tepat berdasarkan prompt
- **Google Gemini Integration**: Integrasi dengan Google AI Studio (Gemini 2.0 Flash Exp) menggunakan LangChain
- **Multiple Tools**:
  - Weather (Cuaca)
  - News (Berita)
  - Web Search (Pencarian Web)
  - Dictionary (Kamus)
  - Quotes (Kutipan Bijak)

## Persyaratan

- Python 3.8+
- pip (Python package manager)

## Instalasi

1. Clone atau download repository ini

2. Install dependencies:
```bash
pip install -r requirements.txt
```

   Atau install manual:
```bash
pip install fastapi uvicorn requests pydantic python-dotenv streamlit langchain-google-genai
```

3. **PENTING**: Konfigurasi API Key Google

   a. Dapatkan API key dari [Google AI Studio](https://aistudio.google.com/app/apikey)
   
   b. Buat/edit file `.env` di root folder project:
   ```
   GOOGLE_API_KEY=your_actual_api_key_here
   ```
   
   c. Pastikan API key valid dan aktif (bukan expired atau restricted)
   
   **Catatan**: Ganti `your_actual_api_key_here` dengan API key Anda sendiri

## Menjalankan Aplikasi

### 1. Jalankan FastAPI Server

Buka terminal pertama dan jalankan:
```bash
uvicorn server:app --reload
```

Server akan berjalan di `http://localhost:8000`

### 2. Jalankan Streamlit App (Opsional)

Buka terminal kedua dan jalankan:
```bash
streamlit run app.py
```

Aplikasi Streamlit akan terbuka otomatis di browser (`http://localhost:8501`)

## Cara Penggunaan

### Menggunakan Streamlit UI (Recommended)

Setelah menjalankan kedua server (FastAPI dan Streamlit), buka browser di `http://localhost:8501`

**Fitur Streamlit App:**

1. **Auto Tool Router**: Masukkan pertanyaan dan sistem otomatis memilih tool yang tepat
2. **Google Gemini AI**: Chat interaktif dengan AI Google Gemini
3. **Manual Tools**: Pilih dan gunakan tool secara manual:
   - Weather Tool: Cek cuaca kota
   - News Tool: Cari berita berdasarkan topik
   - Dictionary Tool: Cari definisi kata
   - Quotes Tool: Dapatkan kutipan bijak
   - Web Search Tool: Pencarian web

### Menggunakan API (curl/Postman)

#### 1. Auto Tool Router (`/auto`)

Endpoint ini secara otomatis memilih tool yang tepat berdasarkan kata kunci dalam prompt.

**Endpoint**: `POST /auto`

**Request Body**:
```json
{
  "prompt": "cuaca di Jakarta"
}
```

**Contoh Penggunaan**:

#### Cek Cuaca
```bash
curl -X POST http://localhost:8000/auto \
  -H "Content-Type: application/json" \
  -d "{\"prompt\": \"cuaca di Bandung\"}"
```

#### Cari Berita
```bash
curl -X POST http://localhost:8000/auto \
  -H "Content-Type: application/json" \
  -d "{\"prompt\": \"berita teknologi\"}"
```

#### Cari Definisi Kata
```bash
curl -X POST http://localhost:8000/auto \
  -H "Content-Type: application/json" \
  -d "{\"prompt\": \"definisi technology\"}"
```

#### Dapatkan Quote
```bash
curl -X POST http://localhost:8000/auto \
  -H "Content-Type: application/json" \
  -d "{\"prompt\": \"quote bijak\"}"
```

#### Web Search (Default)
```bash
curl -X POST http://localhost:8000/auto \
  -H "Content-Type: application/json" \
  -d "{\"prompt\": \"python programming\"}"
```

#### 2. Google Gemini LLM (`/llm`)

Endpoint untuk berkomunikasi langsung dengan Google Gemini AI.

**Endpoint**: `POST /llm`

**Request Body**:
```json
{
  "prompt": "Jelaskan apa itu artificial intelligence"
}
```

**Contoh Penggunaan**:
```bash
curl -X POST http://localhost:8000/llm \
  -H "Content-Type: application/json" \
  -d "{\"prompt\": \"Apa itu FastAPI?\"}"
```

#### 3. Health Check (`/`)

Cek status server.

**Endpoint**: `GET /`

```bash
curl http://localhost:8000/
```

**Response**:
```json
{
  "status": "MCP Server with Google AI Studio - OK"
}
```

## Dokumentasi API Interaktif

Setelah server berjalan, akses dokumentasi API interaktif di:
- Swagger UI: `http://localhost:8000/docs`
- ReDoc: `http://localhost:8000/redoc`

## Struktur Proyek

```
.
├── .env                      # Environment variables (API keys)
├── server.py                 # Main FastAPI application
├── app.py                    # Streamlit frontend application
├── providers/
│   ├── google_llm.py        # Google Gemini integration
│   └── ollama_llm.py        # Ollama integration (optional)
└── tools/
    ├── weather_tool.py      # Weather API
    ├── news_tool.py         # News API
    ├── search_tool.py       # DuckDuckGo search
    ├── dictionary_tool.py   # Dictionary API
    └── quotes_tool.py       # Quotes API
```

## Kata Kunci Auto Router

Auto router mendeteksi kata kunci berikut:

| Kata Kunci | Tool | Contoh |
|------------|------|--------|
| `cuaca`, `weather` | Weather Tool | "cuaca di Jakarta" |
| `berita`, `news` | News Tool | "berita teknologi" |
| `definisi`, `arti` | Dictionary Tool | "definisi python" |
| `quote`, `bijak` | Quotes Tool | "quote bijak" |
| Lainnya | Web Search | "python tutorial" |

## Screenshot Streamlit App

Aplikasi Streamlit menyediakan 3 mode:
1. **Auto Tool Router** - Routing otomatis berdasarkan kata kunci
2. **Google Gemini AI** - Chat interface dengan history
3. **Manual Tools** - Pilih tool secara manual dengan UI yang user-friendly

## Troubleshooting

### Error: Module not found
Pastikan semua dependencies sudah terinstall:
```bash
pip install fastapi uvicorn requests pydantic python-dotenv streamlit langchain-google-genai
```

### Streamlit tidak bisa connect ke server
Pastikan FastAPI server sudah berjalan di `http://localhost:8000` sebelum menjalankan Streamlit

### Error: API key not valid / GOOGLE_API_KEY not found

**Penyebab umum:**
- API key tidak ada di file `.env`
- API key expired atau tidak valid
- API key memiliki restrictions yang tidak sesuai

**Solusi:**
1. Pastikan file `.env` ada di root folder project
2. Dapatkan API key baru dari [Google AI Studio](https://aistudio.google.com/app/apikey)
3. Copy API key dan paste ke file `.env`:
   ```
   GOOGLE_API_KEY=AIzaSy...your_actual_key
   ```
4. Restart server FastAPI setelah mengubah `.env`
5. Pastikan tidak ada spasi atau karakter tambahan di API key

### Server tidak bisa diakses
Pastikan server sudah berjalan dengan perintah:
```bash
uvicorn server:app --reload
```

### Request loading lama / timeout

**Lihat panduan lengkap di [TROUBLESHOOTING.md](TROUBLESHOOTING.md)**

**Quick Fix:**
1. Test components:
   ```bash
   python test_simple.py
   ```

2. Try server without LLM:
   ```bash
   uvicorn server_simple:app --reload --port 8001
   ```

3. Check API key dan ganti jika perlu di file `.env`

4. Ganti model di `providers/google_llm.py`:
   ```python
   model="models/gemini-1.5-flash"  # More stable
   ```