Panduan Integrasi MCP
Protokol Konteks Model (MCP) adalah standar terbuka yang memungkinkan asisten AI memanggil alat eksternal secara langsung. SocialHub mengimplementasikan server MCP sehingga Anda dapat mengelola toko, anggota, kupon, dan poin dari dalam Claude Desktop, Cursor, atau klien yang kompatibel dengan MCP.
Alih-alih menulis kode, Anda cukup meminta AI: "Daftar semua toko aktif" atau "Berikan 500 poin kepada anggota m_abc123" dan asisten akan memanggil alat SocialHub MCP atas nama Anda.
Konfigurasi Koneksi
SocialHub mengekspos endpoint HTTP Streamable MCP. Anda memerlukan dua informasi:
| URL Titik Akhir | https://flash.socialhub.ai/api/mcp |
| API Judul Utama | Authorization: Bearer fl_live_... |
Buat Kunci API di /flash/account/api-keys. Pastikan kunci tersebut memiliki cakupan yang dibutuhkan untuk alat yang akan Anda gunakan.
Claude Desktop Konfigurasi
Tambahkan yang berikut ini ke pengaturan Claude Desktop MCP Anda (claude_desktop_config.json):
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer fl_live_your_key_here"
}
}
}
}Cursor Konfigurasi
Di Cursor, buka Pengaturan > MCP dan tambahkan server baru:
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer fl_live_your_key_here"
}
}
}
}Bidang type juga menerima streamable-http sebagai alias. Klien desktop ini menyimpan kunci dalam file konfigurasi mereka — perlakukan sebagai rahasia, dan lebih suka bentuk variabel lingkungan (di bawah) jika didukung untuk menjaga kunci teks biasa agar tidak tersimpan di disk.
Terhubung dari Claude Code
Tambahkan SocialHub sebagai server HTTP MCP dengan perintah claude mcp add. Ekspor kunci Anda sebagai variabel lingkungan terlebih dahulu agar kunci teks biasa tidak pernah masuk ke dalam file konfigurasi atau riwayat shell Anda:
export FLASH_API_KEY="fl_live_your_key_here"
claude mcp add --transport http flash \
https://flash.socialhub.ai/api/mcp \
--header "Authorization: Bearer ${FLASH_API_KEY}"Atau lakukan commit .mcp.json yang lingkupnya proyek di root repositori. Referensikan variabel lingkungan dengan ${FLASH_API_KEY} — jangan pernah menempelkan kunci teks biasa:
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer ${FLASH_API_KEY}"
}
}
}
}Pemeriksaan mandiri setelah terhubung:
- Jalankan
claude mcp listdan konfirmasikanflashmenunjukkan terhubung. - Minta asisten untuk "daftar alat SocialHub yang tersedia" — Anda seharusnya hanya melihat alat yang diizinkan oleh cakupan kunci Anda.
- Kunci server harus persis
flash; pastikanFLASH_API_KEYdiekspor di shell yang meluncurkan Claude Code.
Perhatian: kunci yang tidak valid atau dicabut muncul sebagai koneksi gagal, bukan permintaan otentikasi. SocialHub menggunakan otentikasi bearer-token dengan tanpa fallback OAuth, jadi jika server menunjukkan gagal/terputus, periksa kembali nilai kunci dan pastikan memiliki cakupan yang Anda butuhkan sebelum melakukan debugging hal lain.
Alat yang Tersedia (75)
cwm_get_forecast_capabilitiesMembaca TimesFM 2.5 Kesiapan tren/kuantil agregat dan kesiapan fusi penyewa-pribadi 7/30/90 hari. Menunggu pelatihan/validasi dinyatakan secara eksplisit. Membutuhkan predictions:read.
cwm_predict_next_behaviorsSatu prediksi konsumen: distribusi/peringkat acara berikutnya akhir ditambah CWM + TimesFM 7/30/90d purchaseWindows. Model acara penyewa yang diperoleh lebih disukai; satu referensi publik internal sebagai cadangan. Tidak ada keluaran ahli individu. Probabilitas acara tidak dikalibrasi; jendela pembelian null hingga dilatih/divalidasi. Membutuhkan predictions:read; metrics:read juga memungkinkan jendela pembelian.
member_id*cwm_forecast_aggregate_trendMemprediksi metrik harian merek/kategori dengan TimesFM 2.5: titik + q10..q90. Riwayat pengembalian hilang nullKuantil agregat tidak dikalibrasi; tidak pernah berupa interval pribadi. Membutuhkan predictions:read AND metrics:read.
metric?, horizon_days?, history_days?, category?cwm_predict_purchase_windowsPenyewa-pribadi CWM + TimesFM Probabilitas pembelian pada 7/30/90 hari (0–1). Nol sampai dilatih dan divalidasi; tidak ada cadangan yang dibuat-buat. Membutuhkan predictions:read AND metrics:read.
member_idlist_metricsDaftar metrik yang tersedia untuk tim ini dari lapisan semantik yang diatur (kunci, label, unit, sertifikasi, kategori). Panggil terlebih dahulu untuk menemukan kunci metrik yang valid. Membutuhkan metrics:read.
category?describe_metricDapatkan spesifikasi lengkap dari satu metrik: definisi resmi, satuan, sertifikasi, dimensi, kolom yang dapat difilter, parameter yang dapat disesuaikan, dan panduan penggunaan. Membutuhkan metrics:read.
metricquery_metricJalankan kueri metrik yang diatur dan kembalikan angka dengan definisi otoritatifnya. Pilih kunci metrik plus dimensi opsional, filter, rentang waktu, granularitas, dan perbandingan periode ke periode — jangan pernah menggunakan SQL. Membutuhkan metrics:read.
metric, dimensions?, filters?, timeRange?, grain?, compare?, params?breakdown_metricUraikan satu metrik berdasarkan satu dimensi dalam jendela terkini yang tetap, dengan label yang mudah dibaca manusia (nama toko/tingkat/saluran). Membutuhkan metrics:read.
metric, dimension, days, state?ask_metricsJawab pertanyaan dalam bahasa alami dengan memilih metrik yang tepat, mengambilnya, dan menguraikan metrik utama. Untuk diagnosis terbuka. Membutuhkan metrics:read.
question, categories?list_storesDaftar semua toko untuk tim saat ini. Mendukung filter status opsional, pencarian, dan penomoran halaman.
status?, search?, limit?, offset?get_storeDapatkan detail toko tertentu berdasarkan ID-nya.
store_idlist_membersDaftar anggota program loyalitas. Mendukung filter program dan penomoran halaman.
programId?, limit?, offset?, status?get_memberDapatkan detail anggota loyalitas tertentu berdasarkan ID. Mengembalikan bidang PII yang telah didekripsi.
member_idlist_coupon_poolsDaftar kumpulan kupon. Mendukung filter status dan jenis.
status?, coupon_type?, limit?, offset?get_dashboard_statsGambaran singkat dasbor operasional (tangkapan, pemindaian, tingkat tangkapan, kupon, toko, rencana). Bukan metrik yang diatur — gunakan alat metrik untuk metrik bisnis yang otoritatif.
(none)earn_pointsBerikan poin loyalitas kepada anggota. Mengembalikan ID transaksi dan saldo baru.
member_id, amount, description?redeem_pointsMengurangi poin loyalitas dari anggota (konsumsi FIFO).
member_id, amount, reasonget_points_balanceDapatkan saldo poin anggota saat ini dan riwayat transaksi terbaru.
member_id, limit?get_member_couponsDapatkan kupon anggota yang tersedia (belum ditebus, belum kedaluwarsa).
member_idget_member_tierDapatkan tingkatan anggota saat ini, persyaratan peningkatan tingkatan berikutnya, dan semua tingkatan.
member_idget_member_receiptsDapatkan riwayat pengajuan tanda terima anggota dengan status OCR dan poin yang diberikan.
member_id, limit?redeem_points_for_couponTukarkan poin loyalitas dengan kupon dari kumpulan yang ditentukan (atomik: poin + kupon, atau tidak keduanya).
member_id, pool_id, points_costissue_couponTerbitkan kupon dari kumpulan kupon kepada seorang anggota (anggota tunggal; audiens massal melalui alur konfirmasi So). Membutuhkan coupons:write.
member_id, pool_id, run_id?check_email_frequencyPeriksa apakah email pemasaran dapat dikirim ke alamat di bawah batas frekuensi (1/hari, 2/minggu, 4/bulan).
emaillist_ambassador_candidatesDaftar kandidat Duta yang diberi skor untuk program loyalitas (mode Pro). Kosong dalam mode Lite.
band?, status?, level?, sort_by?, limit?, offset?get_ambassador_metricsDapatkan laporan ROI Ambassador: tiga sub-tujuan, retensi Bulan ke-2, dan gerbang go/no-go 90 hari.
since_days?, assumed_paid_cac_usd?issue_ambassador_codeTerbitkan atau tingkatkan kode afiliasi Ambassador pribadi anggota. Mengembalikan kode string.
member_id, single_use?, max_redemptions?, min_order_amount?get_tracking_statsDapatkan analitik kunjungan halaman/perilaku: gambaran umum, halaman teratas, rincian perangkat, atau sumber lalu lintas.
metric?, period?, start?, end?, campaign?, limit?get_member_profileProfil gabungan anggota (keterjangkauan, persetujuan/CCPA(Loyalitas, penggabungan perdagangan/kategori/saluran/keterlibatan, preferensi yang dinyatakan, tag, geolokasi kasar, kelompok usia). PII disunting — tanpa nama atau nilai kontak. Membutuhkan members:read.
member_idget_member_timelineRangkaian perilaku terkini satu anggota (kunjungan, poin, kupon, email, tanda terima) + ringkasan, untuk menentukan tindakan yang dipersonalisasi. Mengembalikan PII yang telah didekripsi. Membutuhkan members:behavior:read.
member_id, limit?list_segmentsCantumkan segmen audiens tim (nama, status, jumlah anggota yang tersimpan). Diperlukan segments:read.
status?, limit?, offset?create_segmentBuat segmen audiens dari kondisi terstruktur (jangan pernah menggunakan SQL); menolak duplikat. Membutuhkan segments:write + kunci milik pengguna.
name, conditions, description?list_automationsCantumkan otomatisasi tim (kampanye yang dipicu oleh peristiwa) dan statusnya. Membutuhkan automations:read.
status?pause_automationJeda otomatisasi yang sedang berjalan berdasarkan ID kampanye (idempoten). Membutuhkan automations:write.
campaign_idlist_campaign_templatesDaftar templat kampanye yang tersedia untuk tim ini (resmi + tersimpan), untuk menemukan template_id untuk create_campaign_draft. Membutuhkan campaigns:read.
limit?list_campaignsDaftar kampanye terbaru tim (id, judul, status), untuk menemukan source_campaign_id untuk mengkloning draf. Membutuhkan campaigns:read.
limit?, status?create_campaign_draftBuat DRAFT kampanye dari templat atau kampanye sebelumnya (TIDAK PERNAH dikirim — tinjauan manusia diperlukan). Membutuhkan campaigns:write-draft.
title, template_id?, source_campaign_id?, segment_id?, merge_context?check_member_reachPeriksa apakah anggota tersebut sudah dihubungi (sistem apa pun) di saluran dalam jangka waktu terakhir — hindari menghubungi secara berlebihan. Membutuhkan members:behavior:membaca.
member_id, channel, days?create_memberBuat anggota loyalitas, atau selesaikan secara idempoten anggota yang sudah ada dengan cara externalId/email. Persetujuan pemasaran TIDAK diaktifkan melalui MCP. Memerlukan members:write.
email, fullName, phone?, externalId?, birthMonth?, birthDay?update_memberPerbarui profil/identitas anggota (email, telepon, fullName, externalId, status). Kepemilikan tim diberlakukan. Membutuhkan members:write.
member_id, email?, fullName?, phone?, externalId?, status?upsert_storeBuat toko, atau perbarui toko yang sudah ada yang sesuai dengan externalId untuk tim ini. Membutuhkan stores:write.
name, externalId?, address?, city?, state?, country?, timezone?ingest_orderCatat pesanan pembelian dan berikan poin secara otomatis (anggota diselesaikan berdasarkan memberId > externalId > email). Membutuhkan orders:write.
externalOrderId, customer, totalAmount, financialStatus?, currency?, orderName?, storeId?reverse_pointsPengembalian poin (penarikan kembali) dari anggota, yang terkait dengan ID transaksi asli — untuk pengembalian dana POS/ERP atau pembatalan. Membutuhkan points:write.
member_id, reversesTransactionId, amount, reasonassign_tagTetapkan tag secara manual ke anggota berdasarkan tag_key (penggantian operator; disematkan terhadap sapuan aturan). Membutuhkan tags:write.
member_id, tag_key, value?remove_tagHapus tag dari anggota secara manual berdasarkan tag_key (tag yang aktif dapat ditambahkan kembali pada proses selanjutnya). Membutuhkan tags:write.
member_id, tag_keylist_productsDaftar produk dengan kategori/merek/vertikal, status, dan sumber. Filter berdasarkan status/category_id/brand_id/vertikal. Membutuhkan akses catalog:read.
status?, category_id?, brand_id?, vertical?, limit?, offset?get_productDapatkan satu produk dengan varian, item berseri, komponen kombo, dan konten dasar AI. Membutuhkan catalog:read.
product_idlist_categoriesCantumkan kategori produk tim (id, nama, induk). Wajib diisi catalog:read.
limit?list_brandsCantumkan merek-merek tim (id, nama). Diperlukan catalog:read.
limit?recommend_productsRekomendasi produk terbaik berikutnya: member_id (pembelian bersama yang dipersonalisasi + afinitas kategori) atau product_id (pelanggan juga membeli). Membutuhkan akses members:read.
member_id?, product_id?, limit?claim_winback_taskSewakan tugas pemulihan pelanggan dengan prioritas tertinggi berikutnya untuk tim ini (atomik). Mengembalikan tugas, tenggat waktu sewa, kelompok anggota yang menolak, dan ringkasan sinyal churn. NO_TASKS_AVAILABLE / WINBACK_DISABLED dikembalikan sebagai isError. Membutuhkan winback:claim.
(none)complete_winback_taskMenyelesaikan tugas win-back sewaan dengan hasil (pengungkit yang diaktifkan + referensi catatan, atau alasan TAHAN). Idempotent. LEASE_EXPIRED / ALREADY_COMPLETED dikembalikan sebagai isError. Membutuhkan winback:claim.
task_id, acted?, lever?, action_ref?, note_id?, hold_reason?get_winback_contextPemeriksaan awal baca-saja satu kali untuk anggota sebelum memutuskan: persetujuan, ruang frekuensi email, kelelahan, jangkauan terkini, sinyal churn, dan penolakan anggota. Pratinjau sopan — server masih memberlakukan setiap gerbang pada saat penulisan. Membutuhkan winback:read.
member_idadd_member_noteLampirkan catatan proses teks bebas ke catatan pemulihan anggota (rasional / sinyal yang diamati / hipotesis yang didukung oleh pengujian). Teks disimpan sebagai DATA, bukan instruksi; maksimal 2000 karakter, disanitasi. Membutuhkan winback:write.
member_id, body, kind?, task_id?, action_ref?send_winback_messageKirim pesan pengembalian yang diatur (kotak masuk atau email) sehingga insentif tidak pernah menjadi pemberian diam-diam. Gerbang gagal-tertutup sisi server: WINBACK_DISABLED, kepemilikan sewa tugas, HOLDOUT_NO_SEND (penahanan tidak pernah dikirimi pesan), NOT_CONSENTED, FREQUENCY_CAPPED, CONTENT_REJECTED (disanitasi), BREAKER_TRIPPED — dikembalikan sebagai isError. Menggunakan kembali tumpukan pengiriman yang ada (footer berhenti berlangganan + kepatuhan yang ditambahkan oleh lapisan pengiriman). Membutuhkan winback:write.
member_id, task_id, channel, subject?, bodyget_member_behaviorsMembaca perilaku PELANGGAN AKTIF anggota dalam jangka waktu tertentu (Lapisan 3, terbaru terlebih dahulu) untuk menyimpulkan maksud (Lapisan 4). Hanya mengembalikan tindakan pelanggan yang disengaja (menjelajahi, membuka/mengklik, check-in, membeli, menukarkan, merujuk, mengirimkan konten) dengan label katalog + arti yang terlampir secara langsung, ditambah ringkasan (jumlah berdasarkan jenis + jendela). Alasan di seluruh jendela; maksud adalah hipotesis untuk dikonfirmasi, bukan fakta. Hanya baca. Membutuhkan winback:read.
member_id, since_days?, limit?claim_agent_taskSewakan tugas keputusan agen berikutnya untuk tim ini (atomik; secara opsional dipersempit berdasarkan jenis). Mengembalikan ID tugas, jenis, fakta subjek, dan tenggat waktu sewa. NO_TASKS_AVAILABLE / AGENT_TASKS_DISABLED dikembalikan sebagai isError. Membutuhkan agent_tasks:claim.
kind?get_agent_taskBaca fakta tugas keputusan agen (jenis, subjek, alasan bendera, status) sebelum memutuskan. AGENT_TASK_NOT_FOUND dikembalikan sebagai isError. Membutuhkan agent_tasks:read.
taskIdcomplete_agent_taskSelesaikan tugas sewa dengan sebuah keputusan, terapkan efeknya melalui penulisan idempoten yang ada. fraud_household_referral: blokir (tarik kembali kedua belah pihak) / izinkan (abaikan bendera) / eskalasi (serahkan kepada manusia). ALREADY_COMPLETED / NOT_LEASE_OWNER / LEASE_EXPIRED dikembalikan sebagai isError. Membutuhkan agent_tasks:claim.
taskId, decision, reason?list_objectsSebutkan objek bisnis yang dapat dipertimbangkan oleh tim ini: objek platform inti (anggota, pesanan, toko, kupon, kampanye, produk, segmen, tag) ditambah objek-objek milik tim ini. MCP-Objek kustom yang terlihat — kunci, label, dan arti satu baris yang otoritatif. Panggil terlebih dahulu untuk menemukan yang valid. object kunci. Membutuhkan introspection:read.
(none)describe_objectJelaskan satu bisnis object Dari registri yang diatur: makna otoritatif ditambah properti yang dipartisi menjadi fakta (berbasis kolom), turunan (referensi metrik/tag/rollup dengan kebaruan — tidak pernah menurunkan kaliber ulang), dan kustom (bidang kustom tim ini). Properti PII hanya mengembalikan metadata, tidak pernah nilai. bidang=ringkasan (default) atau lengkap. Membutuhkan introspection:read.
object, fields?list_actionsSebutkan tindakan agen yang diatur (apa yang dapat dilakukan agen): target object, efek samping, perlengkapan (otomatis/ulasan/terlarang), kunci prasyarat sisi server, batasan nilai, dan kemampuan untuk dibalik — periksa sendiri sebelum mengusulkan penulisan. Secara opsional, filter berdasarkan object. Memerlukan introspection:read.
object?list_stamp_programsCantumkan kartu stempel tim (eStampInformasi program: ID, nama, jumlah stempel yang dibutuhkan untuk menyelesaikan, jenis hadiah (kupon/poin/manual), pengaturan ulang otomatis, dan status. Hubungi terlebih dahulu untuk mendapatkan informasi lebih lanjut. program_id. Memerlukan stamp:read.
(none)get_member_stamp_cardsDapatkan kartu stempel aktif anggota: nama program, stempel saat ini, stempel yang dibutuhkan, penyelesaian sejauh ini, dan hadiah. Membutuhkan stamp:read.
member_idgrant_stampsMemberikan stempel kepada anggota untuk program stempel (misalnya, kunjungan toko). Idempoten dengan idempotency_key; setelah penyelesaian kartu, hadiah (kupon/poin) dikeluarkan secara otomatis. Jumlah dibatasi per panggilan. Membutuhkan stamp:write.
program_id, member_id, amount?, reason?, idempotency_key?get_member_pointsPoin anggota: saldo yang dapat dibelanjakan, poin yang diperoleh seumur hidup, penukaran, tingkatan saat ini, batch yang akan segera berakhir. Kunci terikat anggota → poin sendiri (abaikan member_id); kunci tim → berikan member_id. Membutuhkan loyalty:self:read.
member_id?get_member_points_historyTransaksi poin terbaru anggota (diperoleh/ditukarkan/disesuaikan), terbaru terlebih dahulu. Keterangan anggota → riwayat pribadi; keterangan tim → riwayat tim. member_id. Memerlukan loyalty:self:membaca.
member_id?get_member_rewardsHadiah yang dapat ditukarkan anggota dengan poin — katalog dengan biaya poin, ditandai berdasarkan keterjangkauan terhadap saldo anggota. Kunci yang terikat pada anggota → milik sendiri; kunci tim → bagikan member_id. Memerlukan loyalty:self:membaca.
member_id?get_loyalty_program_rulesCara kerja program loyalitas — tingkat perolehan, bonus selamat datang, nilai poin, cara bergabung — plus FAQ yang disetujui merek. Fakta publik. Kunci yang terikat anggota tidak memerlukan argumen. Membutuhkan loyalty:self:read.
member_id?list_synthetic_scenariosCantumkan skenario simulasi panel sintetis beserta batas kegunaan sebenarnya, batas kepercayaan maksimum, dan kolom inputnya masing-masing. Hubungi terlebih dahulu untuk memilih jenisnya. Membutuhkan metrics:read.
(none)get_synthetic_calibrationKalibrasi panel sintetis merek (tingkat keberhasilan prediksi sintetis masa lalu vs kenyataan; null sampai ada backtest). Membutuhkan metrics:read.
(none)get_synthetic_reportBacalah laporan jujur yang dibekukan untuk menjalankan panel sintetis — pembacaan arah, batas kepercayaan, bendera penekanan, tema — atau blockReason Jika belum siap. Membutuhkan metrics:read.
run_idrun_synthetic_panelJalankan panel sintetis: kembaran digital anonim dari suatu segmen bereaksi terhadap stimulus, menghasilkan laporan arah yang jujur (tidak pernah berupa angka absolut sebenarnya). Mengembalikan run_id untuk di-polling. Dibatasi oleh batas run harian + ≤50 kembaran. Membutuhkan synthetic:write.
segment_id, kind, fieldsKeamanan & Privasi
Antarmuka MCP adalah lapisan kenyamanan AI, bukan alat administrasi massal. Beberapa hal yang perlu diingat:
- Server adalah batasnya, bukan obrolan. Operasi penulisan (memberikan/menukarkan poin, menerbitkan kupon, menerbitkan kode Duta) memerlukan cakupan penulisan yang sesuai dan dibatasi oleh pengaman sisi server: batas nilai per panggilan ditambah batas laju penulisan per kunci, keduanya diberlakukan jika gagal. Konfirmasi apa pun dalam obrolan yang diminta klien AI Anda adalah bentuk kesopanan — serverlah yang sebenarnya menghentikan kunci yang bocor atau model yang disuntikkan prompt dari menguras poin.
- Beberapa alat baca mengembalikan PII anggota. Alat seperti
get_memberdanlist_membersdapat mengembalikan nama dan email yang telah didekripsi ke klien AI Anda. Perlakukan data tersebut sesuai kebutuhan dan utamakan kunci dengan hak akses minimal. - Jangan pernah melakukan commit kunci teks biasa. Selalu merujuk pada
${FLASH_API_KEY}dalam.mcp.jsonyang telah di-check-in, bukan kunci literal. - Gunakan kunci dengan hak akses minimal dan hanya baca. Buat kunci yang hanya mencakup alat yang Anda butuhkan. Jika sebuah kunci tidak memiliki cakupan alat tertentu, alat tersebut akan disembunyikan — alat tersebut tidak akan pernah muncul dalam daftar.
Angka Berasal dari Lapisan Semantik yang Diatur
Setiap metrik yang dilaporkan AI — GMV, anggota aktif, tingkat penukaran, dan lainnya — mengalir melalui lapisan metrik yang diatur oleh SocialHub, yang memegang satu definisi (dan sertifikasi) otoritatif untuk setiap metrik. Alat list_metrics, describe_metric, query_metric, breakdown_metric, dan ask_metrics memilih kunci dan dimensi metrik di bawah tata kelola tersebut — AI tidak pernah menulis SQL. Jadi angka yang Anda dapatkan sesuai dengan dasbor Anda, bukan agregat ad-hoc yang rentan terhadap penyimpangan.
Contoh Percakapan
list_stores dengan status="aktif"