Tambahkan Shager ke Cursor dengan .cursor/mcp.json: Ubah Catatan Rilis Jadi Draf untuk Setiap Akun Klien

Konfigurasikan server MCP remote Shager di Cursor dengan url dan header Authorization dari env var, lalu ubah changelog menjadi draf postingan per akun.

Untuk menghubungkan Shager ke Cursor, buat .cursor/mcp.json di proyek Anda (atau ~/.cursor/mcp.json untuk semua proyek) dengan entri shager yang url-nya https://app.shager.ai/api/mcp dan headers-nya mengisi Authorization dengan Bearer ${env:SHAGER_API_KEY}. Cursor mengambil nilai variabel itu dari environment Anda, terhubung lewat HTTP, dan agen langsung mendapat akses ke tool Shager. Tanpa server lokal, tanpa jembatan.

Cursor adalah tempat yang menarik untuk menjalankan distribusi konten, karena bahan mentahnya sudah ada di repo: changelog, dokumentasi, catatan rilis, draf blog. Panduan ini menyiapkan koneksinya dengan benar, lalu memakainya untuk pekerjaan tersebut.

Seperti apa konfigurasi MCP Cursor untuk server remote?

Dokumentasi MCP Cursor menggambarkan server remote sebagai url ditambah objek headers opsional, dan mendokumentasikan interpolasi ${env:NAME} di field url dan headers. Dokumentasi itu juga menyebut dua lokasi: .cursor/mcp.json di dalam proyek untuk tool khusus proyek, dan ~/.cursor/mcp.json di direktori home untuk tool yang tersedia di mana saja.

Untuk Shager:

{
  "mcpServers": {
    "shager": {
      "url": "https://app.shager.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:SHAGER_API_KEY}"
      }
    }
  }
}

Dan di profil shell Anda:

export SHAGER_API_KEY="shgr_live_your_key_here"

Cursor membaca environment variable dari proses yang menjalankannya. Di macOS, aplikasi yang dibuka dari Dock mungkin tidak melihat variabel yang Anda set di ~/.zshrc. Jika server gagal dengan 401 padahal kuncinya benar, tutup Cursor dan jalankan dari terminal dengan cursor . untuk memastikan itulah penyebabnya.

mcp.json Cursor dengan server shager, URL-nya, dan header Authorization yang membaca kunci dari variabel lingkungan.
File yang sama berlaku per proyek atau secara global.

File proyek atau file global?

Lokasi Cocok untuk Yang perlu diwaspadai
.cursor/mcp.json di repo Repo situs marketing atau dokumentasi tempat pekerjaan konten berlangsung Commit hanya dengan bentuk ${env:...}, jangan pernah dengan kunci asli
~/.cursor/mcp.json Anda ingin Shager tersedia di setiap workspace Agen di proyek mana pun kini bisa menjangkau workspace Shager Anda

Bagi developer agensi yang memelihara beberapa situs klien, file proyek biasanya lebih tepat. Repo untuk klien A tidak semestinya punya agen yang bisa seenaknya membuat draf di workspace klien B. Padukan file proyek dengan kunci yang organisasinya hanya memuat workspace yang relevan untuk repo tersebut, atau setidaknya sebut nama workspace secara eksplisit di prompt Anda.

Dari mana kuncinya berasal?

Seseorang membuatnya di https://app.shager.ai/dashboard/agents dan memilih scope-nya. Untuk pekerjaan di dalam editor, read ditambah write adalah default yang tepat: agen bisa mengunggah media dan membuat draf, tetapi Shager menolak menjadwalkan atau memublikasikan tanpa scope publish. Jika Anda sedang membuat prototipe dan belum punya akun, agen bisa membuat sandbox lewat pendaftaran mandiri; resepnya dipublikasikan di shager.ai/auth.md.

Bagaimana memastikan Cursor melihat tool-nya?

Buka pengaturan MCP di Cursor dan cari shager dengan status terhubung beserta daftar tool-nya: whoami, list_workspaces, create_workspace, list_channels, create_connect_link, list_groups, create_group, upload_media_from_url, create_post, schedule_post, request_approval, get_post, list_posts, cancel_post, dan get_analytics. Jika server menampilkan error, tiga penyebab yang biasa adalah environment variable yang belum ada, kata Bearer yang hilang dari nilai header, atau kesalahan sintaks JSON di file.

Lalu, di chat agen:

Call shager whoami and tell me which scopes this key has.
Diagram: brief, draf per akun, persetujuan klien, publikasi bertahap, dan laporan klik per akun.
Lima tahap tetap. Persetujuan per postingan bersifat opsional untuk tiap klien; publikasi butuh pemilik manusia dan izin publikasi terpisah pada kunci.

Alur kerjanya: changelog menjadi draf per akun

Berikut pekerjaan nyata yang sangat cocok untuk Cursor. Misalkan Anda memelihara situs sebuah reseller software dengan dua belas halaman partner regional di Facebook dan Instagram. Setiap kali ada rilis, seseorang menulis ulang changelog menjadi postingan media sosial secara manual. Dengan Shager terhubung, agen bisa mengerjakan versi pertamanya.

Read CHANGELOG.md and take the entry for v4.2 only.
In Shager workspace "Brightline Partners":
1. list_groups and use the group "Regional partners".
2. list_channels so you know each channel's name and network.
3. Write one short post about v4.2 for a non-technical audience.
4. Create a DRAFT with create_post (no schedule_at):
   group_ids: the "Regional partners" group
   per_channel: a caption per channel that names the region from the channel
   name and varies the opening line; keep facts identical
   cta_url: https://brightline.example/releases/4-2
   campaign: "release-4-2"
   first_comment: "Full notes: " followed by the link
5. Print the post id and a table of channel, caption first line, format.

Beberapa pilihan dalam prompt itu memang disengaja.

Faktanya tetap sama, sementara susunan katanya bervariasi. per_channel menimpa caption untuk setiap akun, dan inilah pola yang direkomendasikan. Dua belas salinan teks yang sama di halaman-halaman yang saling terkait adalah jenis pengulangan yang diperingatkan dalam artikel kami tentang menghindari blokir spam saat posting dalam skala besar, dan terasa janggal bagi siapa pun yang mengikuti dua halaman tersebut.

Tautannya dilacak per akun. Dengan mengirim cta_url, Shager membuat tautan pendek dan set UTM terpisah untuk setiap akun, dengan utm_content sebagai penandanya. Nantinya, get_analytics mengembalikan data klik per akun dan per postingan, sehingga partner di satu wilayah bisa melihat apa yang dihasilkan halamannya.

Hasilnya berupa draf. Tetap ada orang yang membacanya di Shager sebelum terbit, entah peninjau internal atau klien lewat tautan persetujuan.

Bagaimana jika Anda lebih suka memanggil API dari kode?

Terkadang Anda ingin ini berupa skrip di repo, bukan chat. Alur rilis di CI, misalnya, tidak semestinya bergantung pada seseorang yang membuka Cursor. Operasi yang sama tersedia lewat REST, dijelaskan di dokumen OpenAPI. Padanan langkah 4 di atas dalam TypeScript:

const API = "https://app.shager.ai/api/v1";
const headers = {
  Authorization: `Bearer ${process.env.SHAGER_API_KEY}`,
  "Content-Type": "application/json",
};

const res = await fetch(`${API}/workspaces/${workspaceId}/posts`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    caption: defaultCaption,
    group_ids: [groupId],
    per_channel: captions.map((c) => ({ channel_id: c.channelId, caption: c.text })),
    cta_url: "https://brightline.example/releases/4-2",
    campaign: "release-4-2",
    first_comment: "Full notes: https://brightline.example/releases/4-2",
  }),
});

const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
console.log(body.data.id, body.data.status); // a DRAFT post

Respons dibungkus dalam { "data": ... } dan error dalam { "error": { "code", "message" } }, jadi penanganan error-nya seragam di mana-mana. Quickstart REST membahas urutan lengkapnya.

Aturan yang layak ditambahkan ke proyek

Cursor mendukung project rules, dan satu aturan pendek bisa menghemat Anda dari mengulang batasan yang sama di setiap prompt. Misalnya:

When using the shager MCP server:
Never pass schedule_at unless I explicitly give a date and time.
Always use per_channel captions when posting to more than one account.
Always pass cta_url for any link instead of pasting raw URLs into captions.
Use ISO 8601 with an offset for any time, in the workspace timezone.

Rules hanyalah panduan bagi model, bukan penegakan. Penegakannya ada pada scope kunci. Jangan beri publish pada kunci untuk editor, maka aturan pertama tidak bisa dilanggar meskipun model mengabaikannya.

FAQ

Apakah Cursor bisa memakai Shager tanpa OAuth?

Bisa. Cursor mengirim header apa pun yang Anda konfigurasikan, jadi kunci API bearer langsung berfungsi. Server MCP Shager juga mendukung login OAuth untuk klien yang lebih memilihnya, tetapi di Cursor kunci saja sudah cukup.

Bisakah saya memakai kunci yang sama di Cursor dan Claude Code?

Bisa, tetapi kunci terpisah lebih baik. Setiap panggilan tercatat di log audit Shager atas nama kunci yang melakukannya, dan kunci terpisah memungkinkan Anda mencabut akses satu tool tanpa mengganggu yang lain. Pengaturan Claude Code punya panduan tersendiri dalam seri ini.

Apakah agen akan langsung memposting jika saya bilang "publikasikan ini"?

Hanya jika kuncinya punya scope publish, akunnya sudah diklaim oleh manusia, dan workspace-nya tidak mewajibkan persetujuan klien lebih dulu. Dengan kunci read dan write, permintaan itu gagal dengan 403 yang jelas dan tidak ada yang terkirim.

Langkah berikutnya

Setelah koneksi berjalan, keuntungan yang lebih besar datang dari prosedur yang bisa diulang, bukan dari prompt yang cerdik. Baca cara membangun Claude skill untuk Shager untuk strukturnya, karena instruksi yang sama mudah diterjemahkan menjadi Cursor rules, dan biarkan halaman agen tetap terbuka sebagai referensi setiap tool dan field.

Coba di akun Anda sendiri.

Gratis selama masa peluncuran, tanpa kartu. Hubungkan akun, tulis sekali, lalu Shager yang memublikasikan dan mengukur hasilnya.