Ana içeriğe geç

Geliştiriciler

Hesabın için Yazıya Çevirme MCP Sunucusu

Kayıtlarınla ve deşifrelerinle izinleri sınırlı asistan araçları üzerinden çalışmak için deşifre MCP sunucusunu Hushscript hesabına bağla.

Hushscript MCP sunucusu, Model Context Protocol ile bir asistanı kayıtlarına ve deşifrelerine bağlar. Tarayıcında bir OAuth bağlantısını onayla ya da kişisel erişim jetonu ver. Deşifre ve ücretli işlemler, hesabının kişisel ya da uygun kuruluş finansman kurallarını izler.

İki sunucu

Hushscript aslında iki ayrı MCP sunucusu çalıştırır ve okuyucuların çoğu bunlardan yalnızca birini ister.

https://mcp.hushscript.com/mcp, bu sayfanın geri kalanının anlattığı hesap sunucusudur. OAuth ya da kişisel erişim jetonu kabul eder ve hesap işinin yapıldığı yer burasıdır: yükleme, deşifre, düzenleme, dışa aktarma.

POST https://hushscript.com/mcp, ayrı ve ücretsiz bir dokümantasyon sunucusudur. Hesap yok, jeton yok, giriş yapılacak bir şey yok. Salt okunur ve anonimdir: bir hesap açamaz, deşifre çalıştıramaz ve bir hesaba ait hiçbir şeye dokunamaz. Fiyatlandırma, özellikler, sayfa içeriği ve nasıl bağlanılacağı hakkındaki soruları beş araç (get_pricing, get_capabilities, how_to_connect, list_pages, get_page) ve aynı bilgiyi sunan üç kaynak (hushscript://pricing, hushscript://capabilities, hushscript://connect) üzerinden yanıtlar.

Hushscript’i yeni bulmuş, elinde jeton olmayan ve bir şey harcamadan önce sana uyup uymadığına hâlâ karar veren bir ajan isen dokümantasyon sunucusuyla başla. Bir hesabı bağlamaya hazır olunca bu sayfanın geri kalanına dön.

Bağlan

Sunucu, tek bir uç noktada Streamable HTTP konuşur:

https://mcp.hushscript.com/mcp

SSE uç noktası yoktur ve yerel olarak kurulacak bir Hushscript yazılımı da yoktur. Claude Code’da:

claude mcp add --transport http hushscript https://mcp.hushscript.com/mcp

JSON yapılandırması alan bir istemcide:

{
  "mcpServers": {
    "hushscript": {
      "type": "http",
      "url": "https://mcp.hushscript.com/mcp"
    }
  }
}

OAuth destekleyen bir istemci, uç noktaları keşfetmek için /.well-known/oauth-authorization-server adresini okur. /oauth/register üzerinden kayıt olabilir ya da bir istemci kimliği meta veri belgesi kullanabilir, ardından giriş için bir tarayıcı penceresi açar.

Onayladığın şey

Yetkilendirme, PKCE’li OAuth 2.1’dir. Tarayıcı penceresi, istemci için bir parola kutusu değil, bir Hushscript onay ekranıdır: istekte bulunan uygulamayı adlandırır, ne yapmak istediğini sade bir dille listeler ve seni bekler. Orada onaylamadıkça hiçbir şey verilmez.

Erişim jetonları bir saat, yenileme jetonları otuz gün geçerlidir. OAuth ile bu kimlik bilgilerini istemcin senin yerine yönetir; yapılandırmaya asla kişisel erişim jetonu yapıştırmazsın.

Tarayıcı olmadan

Bir OAuth bağlantısı tarayıcıda onay gerektirir. Aynı sunucu kişisel erişim jetonunu da doğrudan kabul eder; bağlanırken tarayıcı adımı yoktur. Bir kişi, hesaptaki MCP sayfasında Jetonlar altında bir jeton oluşturur, izinlerini seçer ve dakika satın alıp alamayacağına karar verir. Jeton bir kez gösterilir, hsr1:<region>:pat.<id>.<secret> biçimindedir ve her istekte Authorization: Bearer <token> içinde gider: OAuth gidiş-dönüşü yok, onay ekranı yok, istemci kaydı yok. Aynı jeton REST API ile de çalışır.

Bir jeton, hesap sahibi bir insan olmayan bir makine hesabına da ait olabilir. Bir ajan POST /v1/agent/accounts ile ücretli bir kayıt başlatır, yönetebileceği bir tarayıcıda barındırılan Stripe Checkout’u tamamlar ve ilk jetonunu almak için POST /v1/agent/accounts/{signup_id}/claim adresinde tek kullanımlık bir gizli anahtarla hesabı talep eder. O jeton da diğerleri gibi buraya bağlanır. Akışın uçtan uca anlatımı için Otomatik kullanım sayfasına bak.

Bir jeton başka jeton oluşturamaz, listeleyemez ya da iptal edemez. Bir hesap en fazla 25 etkin jeton tutar. Makine hesabının ilk jetonu kendini REST API üzerinden döndürebilir; akış Otomatik kullanım sayfasındadır.

İzinler

Bir bağlantı bir dizi izin taşır. Hiçbir izin belirtmeyen bir OAuth isteği, çağıranın seçebileceği on bir iznin billing dışındaki onunu varsayılan alır. Uygulamada oluşturulan bir jetonda izinleri kişi seçer. Bir makine hesabının ilk jetonunda yalnızca transcripts:read, transcripts:write, transcribe, account:read, export, billing ve kendini döndürmek için ayrı pat:rotate izni bulunur. Talep işlemi iki faturalandırma ayarını da açar; kişinin oluşturduğu bir jetonda ise bunlar bilerek açılmalıdır. İzinler bilindiğinde sunucu eşleşen araçları duyurur; arka uç bunları her çağrıda uygular.

İzin Ne yapabilir
transcripts:read Deşifreleri, meta verilerini ve silinenler listesini okur ve dışa aktarır
transcripts:write Deşifreleri düzenler, etiketler, çevirir, geri yükler ve siler
transcribe Kayıt yükler, bir bağlantıdan içe aktarır ve deşifre işlemi çalıştırır
insights Insights’ı okur, oluşturur ve siler
context Kayıtlı sözlükleri ve istem ön ayarlarını yönetir
account:read Bakiyeyi, kullanımı, işlemleri ve bekletmeleri okur
settings:write Hesap ayarlarını değiştirir
org:read Kuruluş üyelerini, havuz etkinliğini, faturaları ve denetim kaydını okur
org:write Üye haklarını değiştirir, yasal tutma koyar ve kaldırır, firma muhafazasına (kalıcı) geçişi zamanlar
export Tam hesap dışa aktarımı ister, durumunu denetler ve indirir
billing Ödeme yöntemlerini kaydeder veya yönetir ve dakika paketi satın alır

billing her yönden istisnadır. Asla dolaylı olarak verilmez, onay ekranı onaylamadan önce seni uyarır ve bir satın alma aracı, hem jetondaki faturalandırma bayrağının hem de hesap genelindeki faturalandırma ayarının açık olmasını gerektirir. pat:rotate, OAuth isteğinde ya da uygulamanın jeton formunda seçilemez.

Araçların kapsadığı şey

Dokundukları alana göre gruplanmış 56 araç:

Grup Araç Örnekler
Deşifreler, okuma 4 list_transcripts, get_transcript, list_deleted
Deşifreler, yazma 10 update_body, revert_body, retranslate, tag_transcripts
Deşifre işlemi 8 create_upload, transcribe_from_url, list_jobs, cancel_job
Hesap 6 get_balance, get_usage, list_transactions
Insights 3 get_insights, generate_insights, delete_insights
Dışa aktarma 4 export_transcript, request_account_export
Deşifre bağlamı 5 save_dictionary, save_prompt_preset
Kuruluş 10 get_org, list_org_members, get_org_audit_log, place_transcript_hold
Faturalandırma 6 list_packs, purchase_pack, list_payment_methods, add_payment_method

export_transcript, TXT, SRT, VTT, Markdown veya JSON döndürür. 21 dışa aktarma formatının tamamı uygulamada bulunur.

Araçların yanında sunucu, bağlantı kurulduğunda üç kaynak ve bir instructions dizesi yayınlar: dakika paketleri, kredi ve izin modeli ile eksiksiz hata kodu kataloğu; böylece bir istemci herhangi bir şey çağırmadan önce kuralları okuyabilir. Sayfalanan liste araçları bir limit ve önceki sayfanın next_cursor değerinden gelen opak bir cursor alır; list_packs ve list_payment_methods listelerini cursor olmadan döndürür.

MCP yüklemeleri hazırlanmış ses gönderir. Yerel bir video için önce sesini kendi cihazında hazırla; transcribe_from_url desteklenen ses bağlantılarını sunucu tarafında getirir ve video bağlantılarını içe aktarmaz. MCP ile başlatılan işler standart modu kullanır: deşifreler hesabın saklama ayarına göre tutulur. Tek seferlik gizli mod uygulamada bulunur, MCP jetonlarıyla kullanılamaz.

Örnekler

OAuth akışını izleyen bir istemci normal bir MCP oturumu alır ve bunların hiçbirini doğrudan görmez: SDK’sı JSON-RPC’yi altta kendisi oluşturur. Bu, jeton tutan bir istemcinin elle gönderdiği protokolün aynısıdır ve her iki durumda da hata ayıklama aracı olarak işe yarar.

Jetonla bağlanmak için onu doğrudan isteğe koy; initialize dışında bir el sıkışma gerekmez:

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" }
    }
  }'

Jetonun izinlerinin kapsadığı her aracı görmek için aynı isteği farklı bir gövdeyle tekrar gönder:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list"
}

Her giriş bir ad, bir açıklama ve yukarıdaki gruplarla eşleşen bir JSON Schema inputSchema taşır. Bir aracı çağırmak şöyle görünür; create_upload kredi ayırıp bir yükleme başlatır:

{
  "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 }
    }
  }
}

create_upload gibi yapılandırılmış araçlar, dizgeye çevrilmiş JSON içeren bir content metin bloğu döndürür. Örneğin:

{
  "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}"
    }
  ]
}

Yukarıdaki yanıt yükleme alanlarını gösterir; tam yanıt ayrıca limits, funding ve state alanlarını da içerir. Baytları bu URL’lere yükle, her parçanın ETag’iyle complete_upload’ı çağır, ardından durumu done olana kadar get_job’ı yokla. Aşağıdaki yapılandırılmış örnekler iç JSON’u doğrudan, zaten ayrıştırılmış halde gösterir ve hiç değişmediği için {"jsonrpc":"2.0","id":...} istek sarmalayıcısını atlar: yalnızca name ve arguments değişir.

export_transcript işlenmiş formatı metin olarak, download_account_export_chunk ise base64 metnine kodlanmış ham baytları döndürür. Bir sonucun text alanını yalnızca araç yapılandırılmış veri döndürüyorsa JSON olarak ayrıştır.

Deşifreleri listeleme ve okuma:

{
  "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
}

Insights oluşturma, bir deşifre için ilk çağrıda ücretsizdir. Bu örnek, yeni bir oluşturma başladıktan sonraki bakiyeyi gösterir; reused değeri false’tur:

{
  "name": "generate_insights",
  "arguments": { "id": "t_9c2b7f10" }
}
{
  "ok": true,
  "reused": false,
  "balance_seconds": 5400,
  "held_seconds": 0
}

Dakika satın alma; yanıt düştükten sonraki bir yeniden deneme çift ücretlendirmesin diye idempotency_key zorunludur:

{
  "name": "purchase_pack",
  "arguments": {
    "pack": "300min",
    "payment_method_id": "pm_1PxYzABC",
    "idempotency_key": "agent-2026-09-11-refill-01"
  }
}
{
  "status": "ok",
  "balance_seconds": 23400
}

Kaynaklar araç çağrısı olmadan yanıtlanır; resources/read üç URI’den birini adlandırır:

{
  "jsonrpc": "2.0",
  "id": 9,
  "method": "resources/read",
  "params": { "uri": "hushscript://pricing" }
}

Kısaltılmış yanıt (kaynağın açıklayıcı notu çıkarılmıştır):

{
  "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}]}"
    }
  ]
}

Güncel paket tutarları ve para birimleri için list_packs kullan.

Her arka uç hatası sabit bir slug ve sayısal bir kod taşır; bu, hushscript://error-codes içinde belgelenen aynı gövdedir: {"error": "<slug>", "code": <number>}. Bir araç çağrısı aynı slug ve kodu, ham hata nesnesi yerine okunabilir bir mesajın içine katarak gösterir ve sonucu fırlatmak yerine isError ile işaretler:

{
  "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
}

Neyin dakikaya mal olduğu

Hesap verilerini okumak deşifre dakikası harcamaz. Ücretli işlemler uygulamadaki tarifelerle aynıdır. Bunları genellikle kişisel ön ödemeli dakikalar karşılar; bir kuruluşun deşifresi, etkin havuz tek başına işin tamamını karşılıyorsa ve çeviri hedefi seçilmemişse Teams ortak saat havuzunu kullanabilir. Çeviri hedefli ya da içe aktarılmış ses URL’li bir iş kişisel dakikaları kullanır. Finansman, deşifre muhafazasını değiştirmez.

Uygun kişisel hesaplar kart doğrulamasından sonra 30 ücretsiz dakika alır; bir makine hesabı kayıtta satın aldığı paketle başlar.

Paketlerin kendisi için fiyatlandırma sayfasına bak.

Gözden geçirme ve iptal etme

Giriş yapabildiğin bir hesapta OAuth bağlantıları, hesabındaki MCP sayfasında Bağlı uygulamalar altında istemcileri ve izinleriyle birlikte görünür. Jetonlar da orada listelenir; birini iptal etmek çağrılarını keser. İstemci yapılandırmasını silmek ise yalnızca o istemcinin istek göndermesini durdurur. Kullanılabilir bir giriş posta kutusu olmayan makine hesabının jetonu bunun yerine ajan hesabı akışı üzerinden kendini döndürür.

Sınırlar

İnsan hesabı jetonları her biri için dakikada 1.200 isteğe izin verir. Bir ajan hesabının döndürülmüş jetonları bu bütçeyi paylaşır. Bir jetonla ulaşılan Stripe’ı çağıran faturalandırma rotaları hesap başına dakikada 60 isteği paylaşır: kart kurulumu, satın alma, varsayılan kart değişikliği, kart kaldırma ve kart listesi önbelleğinde ıskalama. Ajan hesabı satın almaları ile insan hesabı jeton satın almaları, hesap başına kayan 24 saatte üç denemeyle sınırlıdır. Ücretli ajan kaydı sayılır, bir deneme ayrıldıktan sonraki başarısızlıklar da; insan tarayıcı oturumundaki satın almalar muaftır. Üst sınıra takılan ret HTTP 429 / kod 4038 agent_purchase_capped olarak döner ve olağan HTTP 429 / kod 5000 rate_limited yanıtından farklıdır. İkisi de Retry-After sağlar.

OAuth yetkilendirme ve tamamlama, dakikada 30’luk ortak bir adres kovasını paylaşır. Kayıt işleminin dakikada 30’luk kendi kovası vardır; /oauth/token ise dakikada 600’lük ayrı bir kovaya sahiptir. Her biri anahtar olarak tek bir IPv4 adresini ya da tek bir IPv6 /64 bloğunu kullanır. Ham jeton doğrulama önbelleği ıskalamalarının aynı anahtarda dakikada 30’luk başka bir kovası vardır; bu, her MCP aracı çağrısı için bir sınır değildir.

30 ücretsiz dakikayla yazıya çevirmeye başlayın

Hesap oluşturmadan önce 5 dakikaya kadar önizle; yeni bir kişisel hesap, uygulamadaki ilk yüklemesi için ücretsiz bir önizleme alır. Tam yazıya çevirme için bir hesap ve dakika gerekir; uygun kişisel hesaplar bir kez 30 ücretsiz dakika alır: kart doğrulamasından sonra ya da ilk satın alımla. Abonelik yok.

30 ücretsiz dakikayla başlayın