copilot-elastic-mcp
v1.0.0
Published
MCP server bridging GitHub Copilot to an Elasticsearch vector / text knowledge base
Readme
Copilot Elasticsearch MCP
MCP server yang menghubungkan GitHub Copilot Chat di VS Code ke knowledge base internal yang disimpan di Elasticsearch (text + vector search).
Struktur
index.js— MCP server (stdio) dengan toolsearch_vector_db&list_indices.docker-compose.yml— Elasticsearch 8.x single-node untuk development.scripts/seed.js— Mengisi indexrag_documentsdengan dokumen contoh.scripts/search-test.js— Tes pencarian dari CLI (tanpa MCP)..vscode/mcp.json— Konfigurasi MCP server untuk VS Code.
Fase 1 — Jalankan Elasticsearch
docker compose up -d
# tunggu ~1 menit, lalu verifikasi:
curl http://localhost:9200Fase 2 — Install Dependencies & Seed Data
npm install
npm run seed # mengisi index "rag_documents" dengan dokumen contoh
npm run search "microservices" # opsional: tes pencarianFase 3 — Aktifkan MCP di VS Code
File .vscode/mcp.json sudah dikonfigurasi otomatis. Setelah membuka folder
d:\repo\mcp di VS Code:
- Buka Command Palette → MCP: List Servers (atau panel Copilot MCP).
- Pilih
elasticsearch-rag→ Start Server. - Buka Copilot Chat dalam mode Agent, pastikan tool
search_vector_dbmuncul di daftar tools.
Konfigurasi User-level (opsional)
Jika Anda ingin server ini aktif di semua workspace, tambahkan ke
settings.json (User):
"mcp": {
"servers": {
"elasticsearch-rag": {
"type": "stdio",
"command": "node",
"args": ["d:\\repo\\mcp\\index.js"],
"env": { "ES_NODE": "http://localhost:9200", "ES_INDEX": "rag_documents" }
}
}
}Catatan: gunakan path absolut dengan double backslash di Windows.
Cara Pengujian
Buka Copilot Chat (mode Agent), lalu coba prompt:
Tolong cari di
search_vector_dbbagaimana standar arsitektur microservices kita.
Copilot akan memanggil MCP, mengambil dokumen dari Elasticsearch, dan menjawab berdasarkan data internal Anda.
Mengganti BM25 → Vector / kNN
Untuk pencarian semantik, ubah body query di index.js menjadi:
query: {
knn: {
field: "embedding",
query_vector: <embedding dari query>,
k: 5,
num_candidates: 50
}
}dan saat indexing, simpan field embedding (dense_vector dims sesuai model
embedding yang Anda pakai, mis. 768/1024/1536). Embedding bisa dihasilkan
oleh model lokal (Ollama, sentence-transformers) atau API (OpenAI, Azure
OpenAI, dsb.).
Variabel Lingkungan
| Variable | Default | Keterangan |
|---|---|---|
| ES_NODE | http://localhost:9200 | URL Elasticsearch |
| ES_INDEX | rag_documents | Nama index |
| ES_API_KEY | — | API key (jika security on) |
| ES_USERNAME / ES_PASSWORD | — | Basic auth alternatif |
| SEARCH_SIZE | 5 | Jumlah hasil default |
