README.md•6.77 kB
# 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
```