BPS MCP Server
Supports deployment as a serverless worker on Cloudflare Workers, allowing public remote access to the BPS statistical data service via HTTP transport.
Enables self-hosting of the BPS MCP server as a Cloudflare Worker, providing serverless deployment with remote access capabilities for statistical data queries.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BPS MCP ServerBerapa jumlah penduduk Indonesia tahun 2023?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
BPS MCP Server
MCP (Model Context Protocol) server untuk data statistik BPS (Badan Pusat Statistik) Indonesia. Memungkinkan AI clients seperti Claude Desktop, Claude Code, Cursor, dan lainnya untuk mengakses data statistik resmi Indonesia melalui natural language.
Fitur
39 tools mencakup seluruh endpoint BPS WebAPI v1 + AllStats Search + AI-friendly shortcuts
AI-friendly — tool
find_datamemungkinkan AI mendapat data dalam 1 langkah (tanpa perlu navigasi hierarki BPS)Integrasi AllStats Search — pencarian unified + full-text PDF search (tanpa API key)
Smart fallback — WebAPI search otomatis fallback ke AllStats jika tidak ada hasil
3 MCP Resources — domain list, kabupaten per provinsi, subjek per domain
5 MCP Prompts — template analisis data siap pakai
Domain resolver dengan fuzzy matching (ketik "Jatim" → Jawa Timur)
Data formatter yang mengubah raw BPS data menjadi format mudah dibaca
In-memory cache dengan TTL per tipe data
Rate limiting — 60 req/menit per API key (remote worker)
Bilingual — error messages dan response mendukung bahasa Indonesia dan Inggris
Atribusi BPS otomatis di setiap response (sesuai ToU)
BYOK (Bring Your Own Key) — setiap user wajib menggunakan API key BPS sendiri
Prasyarat
Node.js ≥ 22
API key BPS (gratis, daftar di webapi.bps.go.id)
Quick Start
Via npx (recommended)
BPS_API_KEY=your_key npx bps-mcp-serverClone & Run
git clone https://github.com/setiapam/bps-mcp-server
cd bps-mcp-server
npm install
npm run build
BPS_API_KEY=your_key npm startAkses Remote via Cloudflare Workers
Server ini tersedia secara publik di:
https://bps-mcp-server.murphi.my.id/mcpMenggunakan di Claude.ai
Buka claude.ai → Settings → Integrations → Add custom connector
Masukkan:
Name: BPS Statistics
URL:
https://bps-mcp-server.murphi.my.id/mcp
Claude akan membuka halaman otorisasi
Masukkan BPS API key Anda (gratis dari webapi.bps.go.id)
Klik "Otorisasi" — selesai!
Server menggunakan OAuth 2.1 sesuai MCP spec. API key Anda tersimpan aman di server dan tidak pernah terekspos ke client.
Menggunakan di AI Client Lain (Remote MCP)
Untuk AI client yang mendukung remote MCP dengan OAuth (ChatGPT, Cursor remote, dll):
MCP Server URL: https://bps-mcp-server.murphi.my.id/mcpClient akan otomatis melakukan OAuth flow — user hanya perlu memasukkan BPS API key saat halaman otorisasi muncul.
Menggunakan dengan Custom Headers (tanpa OAuth)
Untuk client yang mendukung custom headers (Claude Desktop, Cursor lokal):
{
"mcpServers": {
"bps-statistics": {
"type": "http",
"url": "https://bps-mcp-server.murphi.my.id/mcp",
"headers": {
"X-BPS-API-Key": "your_api_key_here"
}
}
}
}Self-hosted
Deploy sebagai serverless worker di akun Cloudflare kamu:
Lihat panduan lengkap di docs/DEPLOY-WORKERS.md.
Catatan: Jika deploy di Cloudflare Workers, BPS API tidak bisa diakses langsung karena Cloudflare bot detection memblokir request antar-Cloudflare. Gunakan bps-api-proxy sebagai relay — deploy di server dengan IP residential (homelab, VPS non-cloud, dll) dan set
BPS_API_BASE_URLke URL proxy.
Konfigurasi MCP Client
Claude Desktop
File: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
{
"mcpServers": {
"bps-statistics": {
"command": "npx",
"args": ["-y", "bps-mcp-server"],
"env": {
"BPS_API_KEY": "your_api_key_here"
}
}
}
}Claude Code
claude mcp add bps -- npx -y bps-mcp-serverAtau file .mcp.json di project root:
{
"mcpServers": {
"bps": {
"command": "npx",
"args": ["-y", "bps-mcp-server"],
"env": {
"BPS_API_KEY": "${BPS_API_KEY}"
}
}
}
}Cursor / VS Code
File ~/.cursor/mcp.json atau .vscode/mcp.json:
{
"mcpServers": {
"bps-statistics": {
"command": "npx",
"args": ["-y", "bps-mcp-server"],
"env": {
"BPS_API_KEY": "your_api_key_here"
}
}
}
}Tools (39)
AI-Friendly Smart Tools (5)
Tool | Deskripsi |
| Recommended — Cari & ambil data dalam satu langkah (resolve wilayah + cari variabel + ambil data) |
| Cari variabel data berdasarkan kata kunci |
| Bandingkan data antar wilayah (2+ wilayah sekaligus dalam 1 panggilan) |
| Ambil data time-series/tren multi-tahun dalam 1 panggilan |
| Ranking/peringkat provinsi berdasarkan indikator (top-N) |
Untuk AI: Gunakan
find_datauntuk data 1 wilayah,compare_datauntuk perbandingan,get_trenduntuk tren,get_rankinguntuk peringkat. Jika hasilnya kurang spesifik, gunakanfind_variablelaluget_dynamic_data.
WebAPI Tools (32)
Tool | Deskripsi |
| Daftar wilayah (provinsi, kab/kota) |
| Konversi nama wilayah → kode domain (fuzzy matching) |
| Daftar subjek data statistik |
| Kategori subjek |
| Daftar variabel tabel dinamis |
| Variabel vertikal (disagregasi) |
| Turunan variabel |
| Periode data tersedia |
| Turunan periode |
| Satuan data |
| Core — Ambil data tabel dinamis (butuh var_id) |
| Daftar tabel statis |
| Detail tabel statis (HTML) |
| Daftar Berita Resmi Statistik (BRS) |
| Detail BRS |
| Daftar publikasi |
| Detail publikasi |
| Indikator strategis (headline data terbaru) |
| Data ekspor/impor berdasarkan kode HS |
| Daftar infografis BPS |
| Detail infografis |
| Daftar berita BPS |
| Detail berita |
| Daftar kegiatan sensus |
| Topik data per kegiatan sensus |
| Kategori CSA |
| Subjek CSA per domain |
| Tabel CSA per subjek |
| Detail tabel CSA (HTML) |
| Glosarium istilah statistik |
| Pencarian lintas tipe (WebAPI + AllStats fallback) |
| Bersihkan cache |
AllStats Search Tools (2)
Tool | Deskripsi |
| Pencarian unified semua konten BPS (publikasi, tabel, BRS, infografis, data mikro, glosarium, klasifikasi) |
| Full-text search di dalam isi PDF publikasi BPS — fitur unik, tidak tersedia di WebAPI |
Bagaimana AI Menggunakan Server Ini
User: "Berapa angka kemiskinan Indonesia 2023?"
AI menggunakan: find_data(query="penduduk miskin", region="Indonesia", year="2023")
Proses internal (otomatis):
1. Resolve "Indonesia" → domain 0000
2. Cari subjek relevan → "Kemiskinan dan Ketimpangan"
3. Cari variabel → "Jumlah Penduduk Miskin" (var_id: 183)
4. Resolve "2023" → period ID 123
5. Ambil data → 25,9 juta jiwa
Jika find_data gagal, AI bisa:
- find_variable(keyword="miskin") → lihat variabel yang tersedia
- list_strategic_indicators() → data headline terbaru
- search(keyword="kemiskinan") → cari tabel/publikasi terkait
User: "Bandingkan kemiskinan Jawa Timur dan Jawa Barat"
AI menggunakan: compare_data(query="kemiskinan", regions="Jawa Timur, Jawa Barat")
User: "Tren pengangguran Indonesia 2019-2024"
AI menggunakan: get_trend(query="pengangguran", region="Indonesia", start_year="2019", end_year="2024")
User: "10 provinsi termiskin"
AI menggunakan: get_ranking(query="kemiskinan", top_n=10, order="highest")Contoh Query
"Berapa jumlah penduduk miskin Indonesia tahun 2023?"
"Bandingkan angka kemiskinan Jawa Timur vs Jawa Barat 2020-2023"
"Tren pengangguran Indonesia dari 2019 sampai 2024"
"10 provinsi dengan kemiskinan tertinggi"
"Peringkat IPM seluruh provinsi 2023"
"Cari BRS terbaru tentang inflasi"
"Data ekspor kopi Indonesia tahun 2024"
"Cari publikasi tentang statistik telekomunikasi"
"Cari teks tentang akses internet di dalam publikasi BPS"
"Berapa IPM Jawa Timur?"
"Pertumbuhan ekonomi Indonesia triwulan terakhir"Resources (3)
URI | Deskripsi |
| Daftar seluruh provinsi Indonesia (cached) |
| Kabupaten/kota per provinsi |
| Subjek statistik per domain |
Prompts (5)
Prompt | Deskripsi |
| Bandingkan data antara dua wilayah |
| Analisis tren data multi-tahun |
| Profil kemiskinan suatu wilayah |
| Ringkasan ekonomi wilayah |
| Statistik kependudukan |
Environment Variables
Variable | Default | Deskripsi |
| (required) | API key dari webapi.bps.go.id |
|
| Base URL API |
|
| Bahasa default: |
|
| Domain default (0000 = Nasional) |
|
| Aktifkan cache |
|
| Maks entri cache |
|
| Level log: debug/info/warn/error |
Development
Setup
git clone https://github.com/setiapam/bps-mcp-server
cd bps-mcp-server
npm installBuild & Test
npm run build # Compile TypeScript
npm run test:unit # Run unit tests (76 tests)
npm run lint # ESLint check
npm run typecheck # TypeScript type checkMenjalankan Lokal
# Dengan environment variable
BPS_API_KEY=your_key npm start
# Atau buat file .env (lihat .env.example)
cp .env.example .env
# Edit .env, isi BPS_API_KEY
npm startTesting dengan MCP Inspector
MCP Inspector memungkinkan kamu menguji tools secara interaktif:
# Install dan jalankan inspector
npx @modelcontextprotocol/inspector
# Di inspector UI:
# 1. Transport: stdio
# 2. Command: node
# 3. Args: dist/index.js
# 4. Env: BPS_API_KEY=your_keyAtau test langsung via stdin (tanpa inspector):
# Test initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | BPS_API_KEY=your_key node dist/index.js
# Test find_data
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized"}\n{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_data","arguments":{"query":"inflasi","region":"Indonesia"}}}\n' | BPS_API_KEY=your_key node dist/index.jsTesting Remote Worker (Lokal)
# Jalankan worker secara lokal
npm run dev:worker
# Test di terminal lain
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-BPS-API-Key: your_key" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'Struktur Project
src/
├── auth/ # API key & OAuth2 providers
├── client/ # BPS WebAPI & AllStats HTTP clients
├── config/ # Configuration & defaults
├── prompts/ # MCP prompt templates
├── resources/ # MCP resources (domain lists)
├── services/ # Cache, domain resolver, data formatter
├── tools/ # MCP tool definitions (39 tools)
│ ├── smart.tools.ts # find_data, find_variable (AI shortcuts)
│ ├── analysis.tools.ts # compare_data, get_trend, get_ranking
│ ├── dynamic-data.tools.ts # Core data tools
│ ├── search.tools.ts # Search with AllStats fallback
│ ├── allstats.tools.ts # AllStats search & deep search
│ └── ... # Domain, publication, trade, etc.
├── transport/ # stdio transport
├── utils/ # Logger, error handling, pagination
├── index.ts # CLI entry point (stdio)
├── worker.ts # Cloudflare Worker entry point (HTTP)
└── server.ts # MCP server factoryAtribusi
Sumber: Badan Pusat Statistik (BPS) — https://www.bps.go.id Layanan ini menggunakan API Badan Pusat Statistik (BPS).
Lisensi
MIT
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/setiapam/bps-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server