Erza Studioerza AI

Erza MCP Server

Hubungkan Claude, Cursor, VS Code, dan klien Model Context Protocol lain ke workspace Erza-mu. Tulis, tulis ulang, jadwalkan, dan terbitkan artikel dari asisten yang sudah kamu pakai.

npx -y @erza-ai/erza-mcp

01

Ringkasan

Erza MCP adalah server Model Context Protocol yang membuka workspace Erza-mu sebagai tool. Klien MCP apa pun bisa menampilkan, menulis, menulis ulang, mengekspor, menjadwalkan, dan menerbitkan artikel dengan akun, paket, dan kredit yang sama seperti di aplikasi.

Klien MCPClaude · Cursor · VS Code
erza-mcplokal atau terkelola
Erza APIapi.erza.ai
Server ini hanya adapter tipis: setiap pemanggilan tool dipetakan ke endpoint Erza API yang sudah ada, sementara tagihan, peran, rate limit, dan pembuatan artikel tetap di Erza API. Jalankan secara lokal lewat stdio, atau hubungkan ke endpoint terkelola lewat Streamable HTTP.
  • Binary native untuk tiap platform, dijalankan lewat npx. Tidak ada lagi yang perlu dipasang.
  • Hanya satu pengaturan wajib: ERZA_API_KEY.
  • 18 tool dengan anotasi MCP (readOnlyHint, destructiveHint), jadi klien bisa meminta izin sebelum aksi berisiko.
  • Error terstruktur dengan code yang stabil dan flag retryable.

02

Kebutuhan

Pastikan semua ini siap sebelum memasang.

  • Akun Erza

    Paket apa pun bisa. Tool yang membuat konten dengan AI memakai kredit dari dompetmu.

  • API key

    Key pribadi yang diawali ez_live_, dibuat di Pengaturan → API Keys.

  • Node.js dengan npx

    Hanya untuk pemasangan lokal (stdio). Endpoint terkelola tidak butuh instalasi apa pun.

Platform yang didukung
Sistem operasiArsitekturBinary bawaan
macOSarm64 (Apple Silicon), x64 (Intel)erza-mcp-darwin-<arch>
Linuxx64, arm64erza-mcp-linux-<arch>
Windowsx64, arm64erza-mcp-win32-<arch>.exe

03

Buat API key

Key ini mengenali kamu di Erza API. Setiap pemanggilan tool berjalan sebagai akunmu.

  1. Masuk ke Erza lalu buka Pengaturan → API Keys.
  2. Klik Buat API key dan beri nama yang mudah dikenali, misalnya mcp-laptop.
  3. Langsung salin token ez_live_…. Token hanya ditampilkan sekali; setelah itu hanya prefix-nya yang terlihat.
Key hilang? Cabut lalu buat yang baru. Pencabutan langsung berlaku untuk semua klien yang memakainya.

04

Pemasangan

Pilih klien dan transport. Tempel key-mu di kolom di bawah agar otomatis terisi di setiap snippet.

Hanya dipakai untuk mengisi snippet di halaman ini. Tetap di browser-mu dan tidak pernah dikirim atau disimpan.

Menjalankan binary native di perangkatmu lewat npx dan berkomunikasi dengan klien lewat stdio.

Claude Code

stdio
  1. Jalankan perintah ini di terminal. --scope user membuat Erza tersedia di semua proyek; hapus flag itu untuk menambahkan Erza ke proyek saat ini saja.
  2. Mulai sesi Claude Code baru lalu jalankan /mcp untuk melihat server dan tool-nya.
bash
claude mcp add erza --scope user \
  --env ERZA_API_KEY=ez_live_your_api_key_here \
  -- npx -y @erza-ai/erza-mcp

05

Cek koneksi

Pastikan server berjalan dan menampilkan tool-nya sebelum kamu mengandalkannya di chat.

MCP Inspector

Menjalankan inspector resmi terhadap server lokal dan membuka UI web. Klik Connect, lalu List Tools harus menampilkan 18 tool. Isi key-mu dulu.

bash
npx @modelcontextprotocol/inspector \
  -e ERZA_API_KEY=ez_live_your_api_key_here \
  npx -y @erza-ai/erza-mcp

Claude Code

claude mcp list menjalankan setiap server yang terkonfigurasi dan menampilkan status koneksinya.

bash
claude mcp list
# erza: npx -y @erza-ai/erza-mcp - ✓ Connected

Endpoint terkelola

Server terkelola menjawab ok di /healthz. Request ke /mcp tanpa key mengembalikan 401.

bash
curl https://mcp.erza.ai/healthz
# ok
Prompt pertama untuk dicoba: “Tampilkan 5 artikel Erza terbaruku.” Asisten seharusnya memanggil erza_article_list dan menampilkan judul serta statusnya.

06

Konfigurasi

Server lokal dikonfigurasi lewat environment variable. Hanya API key yang wajib.

Environment variable

Environment variable
VariabelBawaanKeterangan
ERZA_API_KEYWajib—Key pribadimu, ez_live_…. Dikirim sebagai X-API-Key di setiap request ke Erza API.
ERZA_API_BASE_URLOpsionalhttps://api.erza.aiEndpoint Erza API. Ubah hanya untuk pengembangan lokal atau instance privat.
ERZA_WS_BASE_URLOpsionalwss://api.erza.aiEndpoint WebSocket untuk memulai pembuatan artikel. Diturunkan dari ERZA_API_BASE_URL (https → wss) jika tidak diisi.

Endpoint terkelola

POST https://mcp.erza.ai/mcp
Endpoint Streamable HTTP. Stateless: tidak ada sesi yang disimpan antar-request.
X-API-Key: ez_live_…
Header autentikasi, dikirim di setiap request. Authorization: Bearer ez_live_… juga bisa.
GET https://mcp.erza.ai/healthz
Health check. Mengembalikan ok.
401 Unauthorized
Dikembalikan jika request tidak membawa key: missing credentials: send X-API-Key or Authorization: Bearer.

07

Referensi tool

18 tool dalam empat grup. Buka tool untuk melihat parameternya dan endpoint Erza API yang dipanggil.

  • Hanya bacaTanpa efek samping, aman diulang.
  • MenulisMembuat atau mengubah data.
  • DestruktifTidak bisa dibatalkan.
  • KreditMemakai kredit dompet.

18 tool ditampilkan

  • erza_article_listHanya bacaDaftar artikelmu, terbaru lebih dulu, dengan status, tipe, dan paginasi.
    Upstream
    GET /api/articles
    Anotasi
    readOnlyHint: truedestructiveHint: false
    Parameter erza_article_list
    ParameterTipeKeterangan
    pageinteger1-based page number. Defaults to 1.
    limitintegerItems per page, 1-50. Defaults to 10.
    statusstringFilter by article status, e.g. 'draft', 'published', 'complete'.
    article_typestringFilter by article type name, e.g. 'template-auto'.
    titlestringSubstring filter on the article title.
  • erza_article_getHanya bacaBaca satu artikel secara utuh, termasuk blok kontennya.
    Upstream
    GET /api/articles/{id}
    Anotasi
    readOnlyHint: truedestructiveHint: false
    Parameter erza_article_get
    ParameterTipeKeterangan
    article_idWajibstringArticle id returned by erza_article_list.
    include_blocksbooleanInclude the article content blocks. Defaults to true.
  • erza_article_list_typesHanya bacaDaftar tipe artikel yang bisa dibuat oleh akunmu.
    Upstream
    GET /api/article-types
    Anotasi
    readOnlyHint: truedestructiveHint: false
    Parameter erza_article_list_types
    ParameterTipeKeterangan
    pageinteger1-based page number. Defaults to 1.
    limitintegerItems per page, 1-50. Defaults to 20.
  • erza_article_exportHanya bacaEkspor artikel ke PDF atau DOCX dan kembalikan URL unduhannya.
    Upstream
    POST /api/articles/{id}/download/{pdf,docx}
    Anotasi
    readOnlyHint: truedestructiveHint: false
    Parameter erza_article_export
    ParameterTipeKeterangan
    article_idWajibstringArticle id to export.
    format'pdf' | 'docx'Export format. Defaults to 'pdf'.
  • erza_article_generateMenulisKreditMulai pembuatan 1–5 artikel dengan AI. Langsung mengembalikan generation id.
    Upstream
    POST /api/internal/ws-ticket → WS /ws/articles (auto | quick)
    Anotasi
    readOnlyHint: falsedestructiveHint: false
    Parameter erza_article_generate
    ParameterTipeKeterangan
    itemsWajibobject[1..5]1 to 5 generation items. Every item consumes credits.
    items[].topicWajibstringThe topic (or title/topic mix) to write about, 3-200 characters.
    items[].templatestringTemplate id to render. Omit to let Erza pick the user's default template.
    items[].keywordsstringTarget keywords, at most 5, comma-separated.
    items[].titlestringUse this value as the final title verbatim instead of letting the model write one.
    mode'auto' | 'quick''auto' (default) generates outline, assets and the full article; 'quick' is fast template generation.
    languagestringContent language tag forwarded as Accept-Language, e.g. 'id-ID' or 'en-US'. Defaults to the account setting.
  • erza_article_rewriteMenulisKreditTulis ulang dari topik, kata kunci, teks sumber, atau URL referensi.
    Upstream
    POST /api/internal/ws-ticket → WS /ws/articles (rewrite_article)
    Anotasi
    readOnlyHint: falsedestructiveHint: false
    Parameter erza_article_rewrite
    ParameterTipeKeterangan
    itemsWajibobject[1..5]1 to 5 rewrite items. Every item consumes credits.
    items[].topicWajibstringTopic or title of the article to rewrite, 3-200 characters.
    items[].keywordstringOptional focus keyword.
    items[].sourcesstring[]Optional list of reference/source URLs.
    items[].source_textstringOptional raw text content to rewrite from.
    languagestringContent language tag forwarded as Accept-Language, e.g. 'id-ID' or 'en-US'. Defaults to the account setting.
  • erza_article_regenerateMenulisKreditBuat ulang artikel yang sudah ada dari awal.
    Upstream
    POST /api/internal/ws-ticket → WS /ws/articles (regenerate)
    Anotasi
    readOnlyHint: falsedestructiveHint: false
    Parameter erza_article_regenerate
    ParameterTipeKeterangan
    article_idWajibstringArticle id to regenerate.
    languagestringContent language tag forwarded as Accept-Language, e.g. 'id-ID' or 'en-US'. Defaults to the account setting.
  • erza_article_regenerate_sectionMenulisKreditBuat ulang satu blok konten, dengan prompt arahan opsional.
    Upstream
    POST /api/internal/ws-ticket → WS /ws/articles (regenerate_section)
    Anotasi
    readOnlyHint: falsedestructiveHint: false
    Parameter erza_article_regenerate_section
    ParameterTipeKeterangan
    article_idWajibstringArticle id containing the section.
    content_block_idWajibstringContent block id of the section to regenerate.
    section_promptstringOptional prompt or guidance for regenerating this section.
    languagestringContent language tag forwarded as Accept-Language, e.g. 'id-ID' or 'en-US'. Defaults to the account setting.
  • erza_generation_listHanya bacaDaftar proses pembuatan beserta status dan jumlahnya.
    Upstream
    GET /api/article-generations
    Anotasi
    readOnlyHint: truedestructiveHint: false
    Parameter erza_generation_list
    ParameterTipeKeterangan
    pageinteger1-based page number. Defaults to 1.
    limitintegerItems per page, 1-50. Defaults to 10.
    topicstringFilter by the topic submitted for generation.
    modestringFilter by generation mode, e.g. 'auto_generate', 'quick_create', 'rewrite_article'.
  • erza_generation_getHanya bacaStatus setiap artikel dalam satu proses pembuatan.
    Upstream
    GET /api/article-generations/{id}
    Anotasi
    readOnlyHint: truedestructiveHint: false
    Parameter erza_generation_get
    ParameterTipeKeterangan
    generation_idWajibstringGeneration id returned by erza_article_generate or erza_article_rewrite.
  • erza_generation_waitHanya bacaPolling proses pembuatan sampai selesai atau batas waktu tunggu habis.
    Upstream
    GET /api/article-generations/{id} (polling)
    Anotasi
    readOnlyHint: truedestructiveHint: false
    Parameter erza_generation_wait
    ParameterTipeKeterangan
    generation_idWajibstringGeneration id returned by erza_article_generate or erza_article_rewrite.
    max_wait_secondsintegerHow long to keep polling before answering with the current state, 1-300. Defaults to 60.
    poll_interval_secondsintegerSeconds between polls, 2-30. Defaults to 5.
  • erza_article_create_draftMenulisSimpan kontenmu sendiri sebagai draf. Tanpa AI, tanpa kredit.
    Upstream
    POST /api/articles/draft
    Anotasi
    readOnlyHint: falsedestructiveHint: false
    Parameter erza_article_create_draft
    ParameterTipeKeterangan
    contentWajibstringMarkdown or HTML body content, at least 1 character.
    article_typeWajibstringExisting article type name, e.g. 'template-auto'. See erza_article_list_types.
    titlestringOptional title, 5-255 characters when present.
  • erza_article_updateMenulisUbah judul, konten, ringkasan, slug, atau tag. Hanya field yang dikirim yang berubah.
    Upstream
    PATCH /api/articles/{id}
    Anotasi
    readOnlyHint: falsedestructiveHint: false
    Parameter erza_article_update
    ParameterTipeKeterangan
    article_idWajibstringArticle id to update.
    titlestringNew title, 5-255 characters.
    contentstringNew body content, at least 20 characters.
    excerptstringNew excerpt.
    slugstringNew URL slug.
    tagsstring[]Replacement tag list, at most 10 entries.
  • erza_article_deleteDestruktifHapus artikel secara permanen.
    Upstream
    DELETE /api/articles/{id}
    Anotasi
    readOnlyHint: falsedestructiveHint: true
    Parameter erza_article_delete
    ParameterTipeKeterangan
    article_idWajibstringArticle id to delete. This cannot be undone.
  • erza_article_sync_wordpressMenulisKirim artikel ke situs WordPress yang terhubung.
    Upstream
    POST /api/articles/{id}/sync
    Anotasi
    readOnlyHint: falsedestructiveHint: false
    Parameter erza_article_sync_wordpress
    ParameterTipeKeterangan
    article_idWajibstringArticle id to sync to WordPress.
    connection_idstringWordPress connection id. If omitted, Erza resolves the article's existing connection.
  • erza_scheduler_createMenulisJadwalkan 1–10 artikel ke WordPress atau Blogger pada tanggal dan jam tertentu.
    Upstream
    POST /api/scheduler/schedules
    Anotasi
    readOnlyHint: falsedestructiveHint: false
    Parameter erza_scheduler_create
    ParameterTipeKeterangan
    article_idsWajibstring[1..10]1 to 10 article ids to schedule for publication.
    scheduled_dateWajibstringTarget publication date, YYYY-MM-DD.
    connection_idWajibstringCMS connection id.
    cms_type'wordpress' | 'blogger'Target CMS. Defaults to 'wordpress'.
    timezonestringIANA timezone, e.g. 'Asia/Jakarta' or 'UTC'. Defaults to 'Asia/Jakarta'.
    start_fromstringFirst publishing time on scheduled_date, HH:MM. Defaults to '09:00'.
    interval_minutesintegerMinutes between scheduled articles. Defaults to 30.
    post_status'draft' | 'publish'Post status in the CMS. Defaults to 'draft'.
    wp_author_idintegerOptional WordPress author id.
    confirm_reschedulebooleanConfirm rescheduling when some articles are already scheduled. Defaults to false.
  • erza_scheduler_get_calendarHanya bacaBaca artikel terjadwal dan terbit dalam rentang tanggal.
    Upstream
    GET /api/scheduler/calendar
    Anotasi
    readOnlyHint: truedestructiveHint: false
    Parameter erza_scheduler_get_calendar
    ParameterTipeKeterangan
    start_dateWajibstringStart date, YYYY-MM-DD.
    end_dateWajibstringEnd date, YYYY-MM-DD.
  • erza_scheduler_cancelDestruktifBatalkan job publikasi terjadwal.
    Upstream
    DELETE /api/scheduler/schedules/{id}
    Anotasi
    readOnlyHint: falsedestructiveHint: true
    Parameter erza_scheduler_cancel
    ParameterTipeKeterangan
    job_idWajibstringSchedule job id to cancel.

08

Alur pembuatan

Pembuatan dengan AI berjalan asinkron. Tool memulai job lalu langsung kembali, dan progresnya dibaca lewat REST, jadi tetap aman walau koneksi terputus. erza_article_rewrite, erza_article_regenerate, dan erza_article_regenerate_section memakai alur yang sama.

  1. Mulai dengan erza_article_generate

    Kirim 1–5 item. Langsung mengembalikan generation_id dan id artikel baru. Kredit dipotong per item.

  2. Tunggu dengan erza_generation_wait

    Polling setiap poll_interval_seconds (2–30, bawaan 5) selama maksimal max_wait_seconds (1–300, bawaan 60), lalu mengembalikan status setiap artikel.

  3. Ulangi jika perlu

    Jika masih ada artikel yang berjalan, panggil lagi tool wait dengan id yang sama. Pakai erza_generation_get untuk satu kali snapshot.

  4. Baca dengan erza_article_get

    Ambil setiap artikel yang selesai beserta blok kontennya, lalu edit, ekspor, atau jadwalkan.

erza_article_generate · argumentsjson
{
  "items": [
    {
      "topic": "Brewing manual coffee at home",
      "keywords": "manual brew, v60, pour over"
    }
  ],
  "mode": "auto",
  "language": "id-ID"
}

09

Error

Pemanggilan tool yang gagal mengembalikan hasil error (isError: true) dengan payload terstruktur. Agent bisa bercabang berdasarkan code tanpa perlu mem-parsing pesannya.

Error
codeArtiretryable
unauthorizedAPI key tidak ada, tidak valid, atau sudah dicabut. auth_problem bernilai true.false
insufficient_creditKredit di dompet tidak cukup untuk pembuatan ini.false
not_foundId artikel, proses pembuatan, atau jadwal tidak ada di akun ini.false
invalid_requestAda parameter yang gagal validasi, misalnya topik kurang dari 3 karakter.false
rate_limitedTerlalu banyak request. Tunggu lalu coba lagi.true
upstream_errorErza API mengembalikan error HTTP yang tidak terduga.true
upstream_unreachableErza API tidak bisa dijangkau (jaringan, DNS, atau timeout).true
invalid_upstream_responseErza API mengirim body yang tidak bisa dibaca server.false
generation_stream_failedWebSocket untuk memulai pembuatan gagal sebelum job diterima.false
structuredContentjson
{
  "code": "insufficient_credit",
  "message": "insufficient credits: …",
  "retryable": false,
  "auth_problem": false
}

retryable: true berarti pemanggilan yang sama bisa berhasil nanti. auth_problem: true berarti key-nya harus diperbaiki dulu.

10

Pemecahan masalah

Server tidak mau jalan di Windows

Beberapa klien tidak bisa menjalankan npx langsung di Windows karena npx adalah skrip .cmd. Bungkus perintahnya dengan cmd /c:

claude_desktop_config.jsonjson
{
  "mcpServers": {
    "erza": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "@erza-ai/erza-mcp"
      ],
      "env": {
        "ERZA_API_KEY": "ez_live_your_api_key_here"
      }
    }
  }
}
Semua tool mengembalikan unauthorized

Key salah atau sudah dicabut. Buat key baru di Pengaturan → API Keys, perbarui ERZA_API_KEY (atau header X-API-Key), lalu mulai ulang klien.

Tool Erza tidak muncul

Pastikan file konfigurasi berisi JSON yang valid (tanpa koma di akhir) dan klien sudah benar-benar dimulai ulang. Menjalankan npx -y @erza-ai/erza-mcp di terminal akan menampilkan error saat startup; jika berhasil, perintah itu diam menunggu input.

Membaca log Claude Desktop

Claude Desktop menulis satu file log per server. Server Erza menulis log ke stderr, jadi error-nya muncul di sana:

bash
# macOS
tail -f ~/Library/Logs/Claude/mcp-server-erza.log

# Windows (PowerShell)
Get-Content "$env:APPDATA\Claude\logs\mcp-server-erza.log" -Wait
Unsupported platform or architecture

Paket hanya membawa binary untuk macOS, Linux, dan Windows di x64 dan arm64. Untuk platform lain, pakai endpoint terkelola.

Proses pembuatan terlihat macet

Pembuatan tetap berjalan di Erza setelah tool kembali. erza_generation_wait menjawab dengan status terkini setelah max_wait_seconds; panggil lagi dengan generation_id yang sama. Aman diulang, termasuk setelah koneksi terputus.

Di balik proxy atau firewall

Server lokal butuh akses HTTPS keluar ke api.erza.ai, ditambah koneksi WebSocket (WSS) ke host yang sama untuk memulai pembuatan. Pemasangan terkelola hanya butuh HTTPS ke mcp.erza.ai.

11

Keamanan

Server bertindak dengan izin akunmu, tidak lebih. Tagihan, peran, dan rate limit ditegakkan oleh Erza API.

  • Perlakukan key seperti password

    Siapa pun yang memegang key bisa membaca, menulis, dan memakai kredit sebagai kamu. Jangan tampilkan di screenshot, issue, atau log chat.

  • Jangan simpan key di git

    File proyek seperti .cursor/mcp.json mudah ikut ter-commit. Di repositori bersama, pakai konfigurasi global, inputs VS Code, atau environment variable.

  • Satu key per perangkat

    Buat key terpisah untuk setiap perangkat atau klien, supaya bisa mencabut satu tanpa mengganggu yang lain.

  • Tinjau aksi destruktif

    erza_article_delete dan erza_scheduler_cancel memiliki destructiveHint: true. Biarkan persetujuan per pemanggilan tetap aktif di klienmu.

12

Update & hapus

npx mengambil paket lokal. Endpoint terkelola selalu menjalankan rilis terbaru.

Ambil rilis terbaru

npx menyimpan cache paket. Tambahkan @latest di args agar selalu mengambil versi terbaru.

bash
npx -y @erza-ai/erza-mcp@latest

Kunci versi

Pakai versi pasti di args jika tim butuh pemasangan yang sama di semua perangkat.

bash
npx -y @erza-ai/[email protected]

Hapus

Hapus entri erza dari konfigurasi klien (atau jalankan ini di Claude Code), lalu cabut key-nya.

bash
claude mcp remove erza

Siap menghubungkan Erza?

Buat API key, tempel satu blok konfigurasi, lalu mulai menulis dari asisten yang sudah kamu pakai.