ML MCP Server
Enables training and using machine learning models on local CSV datasets or data from other MCP servers, supporting tasks like forecasting, regression, classification, and anomaly detection.
README
ML MCP Server
MCP server untuk melatih dan memakai model machine learning plug-and-play
atas dataset CSV lokal — diporting dari prototipe mcp-chatbot-multi
(model_factory.py + sensor_ml.py + code_executor.py), disusun ulang
mengikuti pola grk-mcp/idms_mcp/irim-mcp/docs-mcp (satu server per
domain, tools.py dipakai bersama server.py stdio dan http_api.py
bridge HTTP) supaya bisa dipakai lewat Claude Code maupun aplikasi Laravel
chatbot-ai.
Fitur inti dari prototipe tetap dipertahankan (list katalog algoritma, latih
model, prediksi pakai model tersimpan, jalankan kode Python ad hoc), hanya
digeneralisasi supaya bekerja atas dataset & kolom apa pun — bukan hanya
skema sensor_A..D yang dihardcode di prototipe.
Setup
cd ml-mcp
python -m venv .venv
./.venv/Scripts/pip install -r requirements.txt
cp .env.example .env
./.venv/Scripts/python.exe generate_sample_dataset.py # opsional: dataset contoh datasets/sensors.csv
Taruh file .csv apa pun di folder datasets/ — nama file (tanpa .csv)
menjadi nilai parameter dataset di semua tool. Kolom bernama
timestamp/date/datetime/time (case-insensitive) otomatis di-parse
sebagai waktu dan dipakai untuk mengurutkan baris.
Sumber data dari MCP lain (bukan hanya CSV lokal)
Selain dataset yang ditaruh manual, dataset ML juga bisa berasal dari MCP
server LAIN yang datanya ditarik AI di tengah percakapan — ini yang
membuat chatbot-ai bisa menjawab pertanyaan seperti "latih model prediksi
dari data vibrasi pompa X" tanpa data itu pernah ada sebagai file CSV.
Alur yang dijalankan AI (semua lewat tool-calling, satu percakapan):
- Panggil tool MCP lain untuk menarik data, mis.
idms__get_predictive_parameter_trend(...),pkt-grk__get_emission_detail(...), atauirim__list_issues(...)— semuanya mengembalikan baris data berbentuk list of dict (rows/trend/ list hasil tool itu). - Lempar baris data itu ke
ml__ingest_dataset(name, records)—namebebas (mis."vibrasi_pompa_101"),recordspersis baris yang didapat dari langkah 1. Tool ini menyimpannya sebagai dataset bernama, dan mengembalikan kolom-kolom yang berhasil terbaca (termasuk mana yang numerik) supaya AI tahu nilai apa yang valid untuktarget_column/feature_columns. - Lanjut seperti dataset biasa:
ml__get_dataset_summary(name)(opsional, untuk cek kolom),ml__train_model(dataset=name, task=..., ...), laluml__predict_with_model(model_key). - Kalau dataset itu memang cuma dipakai sekali untuk pertanyaan ini,
ml__delete_dataset(name)membersihkannya (model yang sudah dilatih atas dataset itu tetap bisa dipakaipredict_with_modelselamainput_datadiisi lengkap — lihat catatan di tabel tools).
ingest_dataset dibatasi ketat karena isi name/records datang dari LLM,
bukan dari file yang sudah dikurasi manusia: nama dataset hanya boleh
huruf/angka/-/_ (mencegah path traversal), dan records maksimum
50.000 baris per panggilan.
Menjalankan
Stdio (dipakai Claude Code lewat .mcp.json, atau manual untuk debug):
./.venv/Scripts/python.exe server.py
HTTP bridge (dipakai aplikasi chatbot-ai):
./.venv/Scripts/uvicorn http_api:app --host 127.0.0.1 --port 8769
Daftarkan sebagai MCP server baru di chatbot-ai (menu MCP Servers,
atau lewat McpServerSeeder), mengikuti pola pkt-grk/irim/docs:
| Kolom | Nilai |
|---|---|
slug |
ml (jadi prefix nama tool: ml__train_model, dst.) |
base_url |
http://127.0.0.1:8769 |
token |
isi sama dengan ML_API_TOKEN di .env server ini |
Port 8765/8766/8767/8768 sudah dipakai grk-mcp/irim-mcp/
idms_mcp/docs-mcp, jadi server ini memakai 8769.
Keamanan
- Server ini tidak menyentuh database aplikasi lain — "database"-nya hanya
registry SQLite lokal (
ml_registry.sqlite3) yang mencatat metadata model terlatih, dan file.pkldimodels/. Tidak ada risiko SQL injection ke data produksi karena tidak ada tool query SQL ad hoc di sini. execute_python(jalankan kode Python bebas atas sebuah dataset, disandbox dasar: whitelist import, blokir pola berbahaya, timeout 15 detik — lihatcode_executor.py) hanya didaftarkan diserver.py(stdio, dipakai Claude Code secara lokal) dan sengaja tidak diekspos lewathttp_api.py, karena mengizinkan LLM yang menghadap pengguna akhir menjalankan kode bebas adalah permukaan risiko yang jauh lebih besar daripada tool terkurasi lainnya — sama sepertirun_readonly_queryyang dikecualikan dari bridge HTTPgrk-mcp/irim-mcp..envberisi token asli dan sengaja di-gitignore — jangan pernah di-commit.
Tools yang tersedia
| Tool | Transport | Kegunaan |
|---|---|---|
list_datasets() |
stdio + HTTP | Daftar dataset yang tersedia (CSV lokal maupun hasil ingest_dataset), jumlah baris/kolom, kolom numerik. |
get_dataset_summary(dataset) |
stdio + HTTP | Statistik kolom (describe, nilai hilang, contoh baris) — dipakai sebelum train_model. |
ingest_dataset(name, records, overwrite) |
stdio + HTTP | Simpan data yang ditarik dari MCP server LAIN (list of dict) sebagai dataset bernama — lihat bagian "Sumber data dari MCP lain". |
delete_dataset(name) |
stdio + HTTP | Hapus dataset (mis. hasil ingest_dataset yang sudah tidak dipakai). |
list_ml_catalog() |
stdio + HTTP | Daftar task (forecast/regression/classification/anomaly) & algoritma yang tersedia. |
train_model(dataset, task, target_column, feature_columns, algorithm, horizon, threshold) |
stdio + HTTP | Latih model, simpan ke registry + disk, kembalikan metrik evaluasi dan model_key. |
predict_with_model(model_key, input_data) |
stdio + HTTP | Prediksi pakai model tersimpan — input_data opsional, default pakai baris/window terbaru dataset asal model. |
list_trained_models() |
stdio + HTTP | Daftar semua model terlatih beserta metriknya. |
delete_model(model_key) |
stdio + HTTP | Hapus model terlatih (file + entri registry). |
execute_python(code, dataset) |
stdio saja | Jalankan kode Python ad hoc atas sebuah dataset (analisis/ML custom di luar train_model). |
Task ML yang didukung
- forecast — prediksi nilai
target_column(kolom numerik) N langkah ke depan, berbasis pola historis kolom itu sendiri (lag features), analogforecast_sensordi prototipe. - regression — prediksi nilai numerik
target_columndarifeature_columns(kolom lain). - classification — prediksi kelas/kategori
target_columndarifeature_columns. Kalautarget_columnberupa angka (bukan kategori), wajib isithreshold(kelas 1 jika nilai ≥ threshold) — analog taskoutage/predict_failuredi prototipe. - anomaly — deteksi baris tidak normal pada
feature_columns(default semua kolom numerik) pakaiIsolationForest, tanpa target — sama sepertidetect_anomaliesdi prototipe.
Algoritma yang tersedia: linear_regression/random_forest untuk
regression/forecast, logistic_regression/random_forest untuk
classification. anomaly selalu memakai IsolationForest otomatis.
Yang sengaja tidak diporting dari prototipe
Tool analisis khusus data sensor di mcp-chatbot-multi (analyze_sensors,
get_correlation, get_downtime, make_chart, forecast_chart) tidak
diporting karena spesifik ke skema sensor & menghasilkan file gambar (PNG) —
di luar cakupan "model ML plug-and-play" dan tidak konsisten dengan pola
MCP server lain di proyek ini (semuanya mengembalikan JSON, bukan file).
get_dataset_summary (statistik describe()) dan execute_python sudah
cukup untuk eksplorasi data serupa tanpa dependensi matplotlib.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。