Server MCP Hushscript menghubungkan asisten ke rekaman dan transkrip Anda dengan Model Context Protocol. Setujui koneksi OAuth di browser Anda, atau gunakan token akses pribadi. Transkripsi dan tindakan berbayar mengikuti aturan pendanaan akun Anda, yaitu pendanaan pribadi atau pendanaan ruang kerja yang memenuhi syarat.
Dua server
Hushscript sebenarnya menjalankan dua server MCP terpisah, dan sebagian besar pembaca hanya membutuhkan salah satunya.
https://mcp.hushscript.com/mcp adalah server akun yang dijelaskan di
sisa halaman ini. Server ini menerima OAuth atau token akses pribadi, dan di
sinilah pekerjaan akun berlangsung: unggah, transkripsi, edit, ekspor.
POST https://hushscript.com/mcp adalah server dokumentasi gratis yang
terpisah. Tanpa akun, tanpa token, tidak ada yang perlu dimasuki. Server ini
hanya-baca dan anonim: tidak dapat membuka akun, menjalankan transkripsi, atau
menyentuh apa pun milik sebuah akun. Server ini menjawab pertanyaan tentang
harga, kemampuan, isi halaman, dan cara menghubungkan, lewat lima alat
(get_pricing, get_capabilities, how_to_connect, list_pages, get_page)
dan informasi yang sama sebagai tiga resource (hushscript://pricing,
hushscript://capabilities, hushscript://connect).
Jika Anda agen yang baru menemukan Hushscript, tidak memegang token, dan masih menimbang apakah layanan ini cocok sebelum mengeluarkan biaya apa pun, mulailah dengan server dokumentasi. Kembalilah ke sisa halaman ini setelah Anda siap menghubungkan akun.
Hubungkan
Server ini berbicara Streamable HTTP di satu endpoint:
https://mcp.hushscript.com/mcp
Tidak ada endpoint SSE dan tidak ada perangkat lunak Hushscript yang perlu dipasang secara lokal. Di Claude Code:
claude mcp add --transport http hushscript https://mcp.hushscript.com/mcp
Di klien yang menerima konfigurasi JSON:
{
"mcpServers": {
"hushscript": {
"type": "http",
"url": "https://mcp.hushscript.com/mcp"
}
}
}
Klien yang mendukung OAuth membaca /.well-known/oauth-authorization-server
untuk menemukan endpoint-nya. Klien dapat mendaftar lewat /oauth/register atau
memakai dokumen metadata ID klien, lalu membuka jendela browser untuk masuk.
Yang Anda setujui
Otorisasinya adalah OAuth 2.1 dengan PKCE. Jendela browser itu adalah layar persetujuan Hushscript, bukan kotak kata sandi untuk klien: layar itu menyebut aplikasi yang meminta, mencantumkan dengan bahasa yang jelas apa yang ingin dilakukannya, dan menunggu Anda. Tidak ada yang diberikan sampai Anda menyetujuinya di sana.
Token akses berlaku satu jam, dan token refresh berlaku tiga puluh hari. Dengan OAuth, klien Anda menangani kredensial itu untuk Anda; Anda tidak pernah menempelkan token akses pribadi ke konfigurasi.
Tanpa browser
Koneksi OAuth memerlukan persetujuan lewat browser. Server yang sama juga
menerima token akses pribadi secara langsung, tanpa langkah browser saat
menghubungkan. Seseorang membuatnya di bawah Tokens pada
halaman MCP di akun,
memilih scope-nya, dan menentukan apakah token boleh membeli menit. Token itu
hanya ditampilkan sekali, berbentuk hsr1:<region>:pat.<id>.<secret>, dan
dipasang di Authorization: Bearer <token> pada setiap permintaan: tanpa
putaran OAuth, tanpa layar persetujuan, tanpa pendaftaran klien. Token yang sama
berfungsi pada REST API.
Token juga dapat dimiliki akun mesin tanpa pemegang akun manusia. Agen memulai
pendaftaran berbayar dengan POST /v1/agent/accounts, menyelesaikan Stripe
Checkout yang dihosting di browser yang dapat dijalankannya, lalu mengklaim akun
dengan secret sekali pakai di POST /v1/agent/accounts/{signup_id}/claim untuk
mendapat token pertamanya. Token itu terhubung ke sini persis seperti token
lain. Lihat Penggunaan otomatis untuk alur selengkapnya.
Token tidak dapat membuat, menampilkan daftar, atau mencabut token lain. Satu akun memiliki paling banyak 25 token aktif. Token pertama akun mesin dapat merotasi dirinya sendiri lewat REST API; alurnya ada di Penggunaan otomatis.
Izin
Sebuah koneksi memegang sekumpulan scope. Permintaan OAuth yang tidak menyebut
scope apa pun secara default mendapat sepuluh dari sebelas scope yang dapat
dipilih pemanggil, semuanya kecuali billing. Seseorang memilih scope pada
token yang dibuat di aplikasi. Token pertama akun mesin hanya memiliki
transcripts:read, transcripts:write, transcribe, account:read, export,
billing, dan scope terpisah pat:rotate untuk rotasi diri. Klaimnya
mengaktifkan kedua sakelar penagihan; token buatan seseorang memerlukan
keduanya diaktifkan secara sengaja. Jika scope diketahui, server menawarkan alat
yang sesuai; backend memberlakukannya pada setiap panggilan.
| Scope | Yang diizinkan |
|---|---|
transcripts:read |
Membaca dan mengekspor transkrip, metadata-nya, serta daftar yang dihapus |
transcripts:write |
Mengedit, memberi tag, menerjemahkan, memulihkan, dan menghapus transkrip |
transcribe |
Mengunggah rekaman, mengimpor dari tautan, dan menjalankan transkripsi |
insights |
Membaca, membuat, dan menghapus Insights |
context |
Mengelola kamus dan preset instruksi yang tersimpan |
account:read |
Membaca saldo, pemakaian, transaksi, dan penahanan |
settings:write |
Mengubah pengaturan akun |
org:read |
Membaca anggota ruang kerja, buku besar, faktur, dan log audit |
org:write |
Mengubah hak anggota, memasang dan mencabut penahanan untuk keperluan hukum, serta menjadwalkan pemindahan ke pengelolaan oleh organisasi (permanen) |
export |
Meminta ekspor akun penuh, memeriksa statusnya, dan mengunduhnya |
billing |
Menyimpan atau mengelola metode pembayaran dan membeli paket menit |
billing adalah pengecualian dalam segala arah. Scope ini tidak pernah
diberikan secara implisit, layar persetujuan memperingatkan Anda sebelum Anda
menyetujuinya, dan alat pembelian memerlukan sakelar penagihan pada token serta
sakelar penagihan tingkat akun, keduanya diaktifkan. pat:rotate tidak dapat
dipilih dalam permintaan OAuth atau formulir token di aplikasi.
Cakupan alat
56 alat, dikelompokkan menurut yang disentuhnya:
| Grup | Alat | Contoh |
|---|---|---|
| Transkrip, membaca | 4 | list_transcripts, get_transcript, list_deleted |
| Transkrip, menulis | 10 | update_body, revert_body, retranslate, tag_transcripts |
| Transkripsi | 8 | create_upload, transcribe_from_url, list_jobs, cancel_job |
| Akun | 6 | get_balance, get_usage, list_transactions |
| Insights | 3 | get_insights, generate_insights, delete_insights |
| Ekspor | 4 | export_transcript, request_account_export |
| Konteks transkripsi | 5 | save_dictionary, save_prompt_preset |
| Ruang kerja | 10 | get_org, list_org_members, get_org_audit_log, place_transcript_hold |
| Penagihan | 6 | list_packs, purchase_pack, list_payment_methods, add_payment_method |
export_transcript mengembalikan TXT, SRT, VTT, Markdown, atau JSON. Seluruh 21
format ekspor ada di aplikasi.
Selain alat, server menerbitkan tiga resource dan string instructions saat
terhubung: paket menit, model kredit dan scope, serta katalog kode error yang
lengkap, sehingga klien dapat membaca aturannya sebelum memanggil apa pun. Alat
daftar yang berhalaman menerima limit dan cursor buram dari next_cursor
halaman sebelumnya; list_packs dan list_payment_methods mengembalikan
daftarnya tanpa cursor.
Unggahan MCP mengirim audio yang sudah disiapkan. Untuk video lokal, siapkan
audionya di perangkat Anda terlebih dahulu; transcribe_from_url mengambil
tautan audio yang didukung di sisi server dan tidak mengimpor tautan video.
Pekerjaan yang dimulai lewat MCP memakai mode standar: transkripnya disimpan
sesuai pengaturan masa penyimpanan akun. Mode privat sekali pakai tersedia di
aplikasi, bukan lewat token MCP.
Contoh
Klien yang menjalankan alur OAuth mendapat sesi MCP biasa dan tidak pernah melihat semua ini secara langsung: SDK-nya membangun JSON-RPC di baliknya. Ini adalah protokol yang sama yang dikirim secara manual oleh klien pemegang token, dan berguna sebagai alat bantu debug dalam kedua kasus.
Hubungkan dengan token dengan memasangnya langsung pada permintaan, tanpa
jabat tangan selain initialize:
curl -s https://mcp.hushscript.com/mcp \
-H "Authorization: Bearer hsr1:us:pat.4f2a1c.9e7b3d2a5c8f1e6b4a0d7c3f2e1b9a8d" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": { "name": "example-client", "version": "1.0.0" }
}
}'
Kirim lagi permintaan yang sama dengan body berbeda untuk melihat setiap alat yang tercakup scope token:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}
Setiap entri membawa nama, deskripsi, dan inputSchema JSON Schema, sesuai
grup di atas. Memanggil alat tampak seperti ini, dengan create_upload
mencadangkan kredit dan memulai unggahan:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "create_upload",
"arguments": {
"size_bytes": 52428800,
"duration_seconds": 1800,
"title": "Team standup 2026-09-10",
"transcription_options": { "speaker_detection": true }
}
}
}
Alat terstruktur seperti create_upload mengembalikan blok teks content
berisi JSON yang sudah menjadi string. Contohnya:
{
"content": [
{
"type": "text",
"text": "{\n \"job_id\": \"job_8f3a1c2b9e\",\n \"balance_seconds\": 5400,\n \"held_seconds\": 1800,\n \"upload\": {\n \"part_size_bytes\": 33554432,\n \"total_parts\": 2,\n \"part_urls\": [\n { \"n\": 1, \"url\": \"https://...\" }\n ],\n \"next_part_number\": 2\n }\n}"
}
]
}
Respons di atas menampilkan kolom unggahan; respons lengkapnya juga memuat
limits, funding, dan state. Unggah byte ke URL itu, panggil
complete_upload dengan ETag setiap bagian, lalu polling get_job sampai
statusnya done. Contoh terstruktur di bawah menampilkan JSON bagian dalam
secara langsung, yang sudah di-parse, dan menghilangkan pembungkus permintaan
{"jsonrpc":"2.0","id":...} karena tidak pernah berubah: hanya name dan
arguments yang berubah.
export_transcript mengembalikan format hasil render sebagai teks, dan
download_account_export_chunk mengembalikan byte mentah yang disandikan
sebagai teks base64. Parse text hasil sebagai JSON hanya jika alat
mengembalikan data terstruktur.
Menampilkan daftar dan membaca transkrip:
{
"name": "list_transcripts",
"arguments": { "limit": 5 }
}
{
"transcripts": [
{
"id": "t_9c2b7f10",
"title": "Team standup 2026-09-10",
"language_detected": "en",
"duration_seconds": 1800,
"tags": ["standup"],
"insights_state": "none"
}
],
"next_cursor": null
}
Membuat Insights, gratis pada panggilan pertama untuk sebuah transkrip. Contoh
ini menampilkan saldo setelah pembuatan baru dimulai; reused bernilai false:
{
"name": "generate_insights",
"arguments": { "id": "t_9c2b7f10" }
}
{
"ok": true,
"reused": false,
"balance_seconds": 5400,
"held_seconds": 0
}
Membeli menit, dengan idempotency_key wajib agar percobaan ulang setelah
respons yang terputus tidak menagih dua kali:
{
"name": "purchase_pack",
"arguments": {
"pack": "300min",
"payment_method_id": "pm_1PxYzABC",
"idempotency_key": "agent-2026-09-11-refill-01"
}
}
{
"status": "ok",
"balance_seconds": 23400
}
Resource menjawab tanpa panggilan alat, dengan resources/read yang menyebut
salah satu dari tiga URI:
{
"jsonrpc": "2.0",
"id": 9,
"method": "resources/read",
"params": { "uri": "hushscript://pricing" }
}
Respons ringkas (catatan penjelasan resource dihilangkan):
{
"contents": [
{
"uri": "hushscript://pricing",
"mimeType": "application/json",
"text": "{\"packs\":[{\"id\":\"45min\",\"minutes\":45},{\"id\":\"300min\",\"minutes\":300},{\"id\":\"900min\",\"minutes\":900},{\"id\":\"1800min\",\"minutes\":1800},{\"id\":\"6000min\",\"minutes\":6000}]}"
}
]
}
Gunakan list_packs untuk jumlah dan mata uang paket terkini.
Setiap kegagalan backend membawa slug yang stabil dan kode numerik, body
{"error": "<slug>", "code": <number>} yang sama seperti yang didokumentasikan
di hushscript://error-codes. Panggilan alat menampilkan slug dan kode yang
sama, dimasukkan ke dalam pesan yang mudah dibaca alih-alih objek error mentah,
dan menandai hasilnya dengan isError alih-alih melempar error:
{
"content": [
{
"type": "text",
"text": "Not enough transcription credit. This job needs 1800 seconds and the balance is 900 seconds. Top up at https://app.hushscript.com/billing (insufficient_balance, E3001)"
}
],
"isError": true
}
Apa yang memakan menit
Membaca data akun tidak menghabiskan menit transkripsi. Tindakan berbayar memakai tarif yang sama dengan aplikasi. Menit prabayar pribadi biasanya mendanainya; transkripsi ruang kerja dapat memakai saldo menit bersama Teams jika saldo bersama yang aktif saja sudah menutupi seluruh pekerjaan dan tidak ada target terjemahan yang dipilih. Pekerjaan dengan target terjemahan atau URL audio yang diimpor memakai menit pribadi. Sumber dana tidak mengubah pengelolaan transkrip.
Akun pribadi yang memenuhi syarat mendapat 30 menit gratis setelah verifikasi kartu; akun mesin dimulai dengan paket yang dibelinya saat pendaftaran.
- Mentranskripsikan rekaman menghabiskan menit sesuai durasinya. Mode medis menambah 100%, dan setiap target terjemahan menambah 25%. Dengan multikanal aktif, setiap kanal audio ditagih terpisah, sehingga satu berkas stereo dihitung dua kali.
- Insights: pembuatan pertama per transkrip gratis. Membuat ulang berikutnya dikenai 40% dari durasi rekaman dari transkrip asli, atau 30% dari versi yang dirapikan. Pembuatan ulang memakai menit pribadi anggota, bahkan ketika saldo bersama ruang kerja membayar transkripsinya.
- Menerjemahkan ulang transkrip dikenai 25% dari durasinya per bahasa, dan hasilnya menimpa: setiap bahasa yang ditagih oleh panggilan itu kehilangan salinan terjemahan yang diedit manual, tanpa cara untuk memulihkannya.
purchase_packlangsung menagih kartu tersimpan yang memenuhi syarat saat berhasil. Alat ini memerlukan scopebilling, sakelar penagihan milik token, dan sakelar penagihan tingkat akun. Alat ini menambah menit ke saldo pribadi, bukan ke saldo bersama Teams.add_payment_methodtidak dikenai biaya. Alat ini mengembalikan tautan Stripe Checkout yang menyimpan kartu ke akun tanpa menagihnya; selesaikan sekali di browser (agen dapat menjalankan browsernya sendiri).purchase_packberikutnya mencoba pembebanan off-session; penolakan atau tantangan dari penerbit kartu mengembalikan kode error tersendiri alih-alih halaman yang tidak selesai.
Lihat harga untuk paketnya sendiri.
Meninjau dan mencabut
Untuk akun yang dapat Anda masuki, koneksi OAuth muncul di bawah Connected apps pada halaman MCP di akun Anda, beserta klien dan scope-nya. Token juga tercantum di sana; mencabut satu token memutus panggilannya. Menghapus konfigurasi klien hanya menghentikan klien itu dari meminta akses. Akun mesin tidak memiliki kotak surat login yang dapat dipakai, sehingga tokennya merotasi dirinya sendiri lewat alur akun agen.
Batas
Token akun manusia mengizinkan 1.200 permintaan per menit untuk masing-masing
token. Rangkaian token akun agen berbagi jatah itu di seluruh rotasi. Rute
penagihan yang memanggil Stripe dan dijangkau lewat token berbagi 60 permintaan
per menit per akun: penyiapan kartu, pembelian, perubahan kartu default,
penghapusan kartu, dan cache miss pada daftar kartu. Pembelian akun agen dan
pembelian token akun manusia dibatasi tiga percobaan per 24 jam bergulir per
akun. Pendaftaran agen berbayar dihitung, begitu pula kegagalan setelah
percobaan direservasi; pembelian lewat sesi browser manusia dikecualikan.
Penolakan karena batas adalah HTTP 429 / kode 4038 agent_purchase_capped,
berbeda dari HTTP 429 / kode 5000 rate_limited yang biasa. Keduanya
menyertakan Retry-After.
Otorisasi dan penyelesaian OAuth berbagi satu bucket alamat sebesar 30 per
menit. Pendaftaran memiliki bucket 30 per menit tersendiri; /oauth/token
memiliki bucket terpisah sebesar 600 per menit. Masing-masing memakai satu
alamat IPv4 atau satu IPv6 /64 sebagai kuncinya. Cache miss introspeksi token
mentah memiliki bucket 30 per menit lainnya pada kunci yang sama; itu bukan
batas untuk setiap panggilan alat MCP.