Skip to main content
Glama
tirthanzh

MCP Transportasi Bandara & Pelabuhan

by tirthanzh
README.md
# MCP Transportasi Bandara & Pelabuhan

Dua MCP (Model Context Protocol) server untuk mengakses data bandara dan pelabuhan di Indonesia. Dibangun dengan FastMCP + PostgreSQL.

## Quick Start

```bash
# 1. Clone & install dependencies
pip install -r requirements.txt

# 2. Copy & isi environment variables
cp .env.example .env

# 3. Jalankan MCP server
python -m source.mcp_bandara --transport=streamable-http --port 5921   # Bandara
python -m source.mcp_pelabuhan --transport=streamable-http --port 5922  # Pelabuhan

# 4. Jalankan unit test
python tests.py
```

## Environment Variables

| Variable | Default | Deskripsi |
|---|---|---|
| `PG_HOST` | — | PostgreSQL host |
| `PG_PORT` | `5432` | PostgreSQL port |
| `PG_USER` | — | Database user |
| `PG_PASSWORD` | — | Database password |
| `PG_DB` | — | Nama database |
| `PG_SCHEMA` | `public` | Schema utama (contoh: `transportasi`) |

## Tools

### MCP Bandara (8 tools) — port 5921

| Tool | Deskripsi |
|---|---|
| `bandara_search` | Cari bandara by keyword (nama, IATA, ICAO, lokasi, provinsi) |
| `bandara_get_detail` | Detail lengkap bandara (OurAirports + Kemenhub) |
| `bandara_get_runways` | Spesifikasi runway (dimensi, permukaan, lighting) |
| `bandara_get_nearby` | Bandara terdekat dalam radius X km |
| `bandara_get_radio` | Frekuensi radio navigasi/komunikasi |
| `bandara_list_by_province` | List bandara by nama provinsi (fuzzy) |
| `bandara_list_by_facility_type` | List bandara by tipe (large/medium/small/heliport) |
| `bandara_list_runways_by_length` | Bandara dengan runway > X meter |

### MCP Pelabuhan (4 tools) — port 5922

| Tool | Deskripsi |
|---|---|
| `pelabuhan_search` | Cari pelabuhan by keyword (nama, kota, provinsi, tipe) |
| `pelabuhan_get_detail` | Detail lengkap pelabuhan + koordinat |
| `pelabuhan_list` | List pelabuhan by `list_by`: `province`/`type`/`city`/`location_keyword` + optional `remark` filter |
| `pelabuhan_summary_by_province` | Statistik jumlah pelabuhan per provinsi |

## Sumber Data

- **OurAirports**: `ourairports_facility_data` (683 bandara), `ourairports_runways` (406 runway), `ourairports_nearby` (34k nearby), `ourairports_radio` (213 frekuensi)
- **Kemenhub RI**: `daftar_bandara_di_indonesia` (636 bandara — data administratif, legal, teknis)
- **BIG**: `peta_rupa_bumi_indonesia_pelabuhan_pt` (1,025 pelabuhan — geometri, klasifikasi)
- **Kemendagri**: `mv_dimension_dukcapil_province_v1_2_no_geom` (mapping kode ↔ nama provinsi, 38 rows)

## Dokumentasi Lengkap

- **[CLAUDE.md](CLAUDE.md)** — Arsitektur, detail semua tool, service API, pattern, known issues
- **[skills/EXPLORATION.md](skills/EXPLORATION.md)** — Hasil eksplorasi database (schema, sample, relasi)
- **[tests.py](tests.py)** — 70 unit test

## Tech Stack

- Python 3.13 + FastMCP 3.3.1
- asyncpg (PostgreSQL async driver)
- Pydantic 2 (input validation)
- loguru (logging)