Der MCP-Server für Transkription von Hushscript verbindet einen Assistenten über das Model Context Protocol mit Ihren Aufnahmen und Transkripten. Genehmigen Sie eine OAuth-Verbindung im Browser oder geben Sie einen persönlichen Zugriffstoken an. Transkriptionen und kostenpflichtige Aktionen folgen den Finanzierungsregeln Ihres Kontos für persönliche Minuten oder berechtigte Workspace-Pools.
Zwei Server
Hushscript betreibt tatsächlich zwei getrennte MCP-Server, und die meisten Leser brauchen nur einen davon.
https://mcp.hushscript.com/mcp ist der Kontoserver, den der Rest dieser
Seite beschreibt. Er akzeptiert OAuth oder einen persönlichen Zugriffstoken und ist
der Ort, an dem die eigentliche Arbeit stattfindet: hochladen, transkribieren,
bearbeiten, exportieren.
POST https://hushscript.com/mcp ist ein separater kostenloser Dokumentationsserver.
Kein Konto, kein Token, keine Anmeldung nötig. Er ist nur lesend und anonym:
Er kann kein Konto eröffnen, keine Transkription ausführen und nichts
anfassen, das zu einem Konto gehört. Er beantwortet Fragen zu Preisen,
Funktionsumfang, Seiteninhalten und zum Verbinden, über fünf Tools
(get_pricing, get_capabilities, how_to_connect, list_pages,
get_page) und dieselben Informationen als drei Ressourcen
(hushscript://pricing, hushscript://capabilities, hushscript://connect).
Wenn Sie ein Agent sind, der Hushscript gerade erst gefunden hat, keinen Token besitzt und noch entscheidet, ob es passt, bevor Sie etwas ausgeben, beginnen Sie mit dem Dokumentationsserver. Kommen Sie zum Rest dieser Seite zurück, sobald Sie bereit sind, ein Konto zu verbinden.
Verbinden
Der Server spricht Streamable HTTP an einem einzigen Endpunkt:
https://mcp.hushscript.com/mcp
Es gibt keinen SSE-Endpunkt und keine Hushscript-Software, die Sie lokal installieren müssen. In Claude Code:
claude mcp add --transport http hushscript https://mcp.hushscript.com/mcp
In einem Client, der eine JSON-Konfiguration akzeptiert:
{
"mcpServers": {
"hushscript": {
"type": "http",
"url": "https://mcp.hushscript.com/mcp"
}
}
}
Ein OAuth-fähiger Client liest /.well-known/oauth-authorization-server,
um die Endpunkte zu finden. Er kann sich über /oauth/register registrieren
oder ein Metadatendokument mit Client-ID verwenden und öffnet dann ein
Browserfenster zur Anmeldung.
Was Sie genehmigen
Die Autorisierung erfolgt über OAuth 2.1 mit PKCE. Das Browserfenster ist ein Zustimmungsbildschirm von Hushscript, keine Passwortabfrage für den Client: Er nennt die anfragende Anwendung, listet in einfachen Worten auf, was sie tun möchte, und wartet auf Sie. Nichts wird gewährt, bevor Sie dort zustimmen.
Zugriffstoken gelten eine Stunde, Refresh-Token dreißig Tage. Bei OAuth verwaltet Ihr Client diese Zugangsdaten für Sie. Sie müssen keinen persönlichen Zugriffstoken in die Konfiguration einfügen.
Ohne Browser
Eine OAuth-Verbindung benötigt Ihre Zustimmung im Browser. Derselbe Server
akzeptiert auch direkt einen persönlichen Zugriffstoken, ohne Browserschritt
beim Verbinden. Eine Person erstellt ihn unter Neuen Token erstellen auf der
MCP-Seite im Konto, wählt seine
Berechtigungen und entscheidet, ob er Minuten kaufen darf. Der Token wird
einmal angezeigt, sieht aus wie hsr1:<region>:pat.<id>.<secret> und steht
bei jeder Anfrage in Authorization: Bearer <token>: kein OAuth-Roundtrip,
kein Zustimmungsbildschirm, keine Client-Registrierung. Derselbe Token
funktioniert mit der REST-API.
Ein Token kann auch zu einem Maschinenkonto ohne menschlichen Kontoinhaber
gehören. Ein Agent startet mit POST /v1/agent/accounts eine bezahlte
Registrierung, schließt den gehosteten Stripe Checkout in einem Browser ab,
den er selbst steuern darf, und aktiviert das Konto mit einem einmaligen
Geheimnis über POST /v1/agent/accounts/{signup_id}/claim, um seinen ersten
Token zu erhalten. Dieser Token verbindet sich hier wie jeder andere.
Automatisierte Nutzung erklärt den vollständigen Ablauf.
Ein Token kann keine anderen Token erstellen, auflisten oder widerrufen. Ein Konto hat höchstens 25 aktive Token. Der erste Token des Maschinenkontos kann sich über die REST-API selbst rotieren; den Ablauf zeigt Automatisierte Nutzung.
Berechtigungen
Eine Verbindung hat eine Reihe von Berechtigungen. Eine OAuth-Anfrage, die
keine nennt, erhält standardmäßig zehn der elf auswählbaren Berechtigungen,
alle außer billing. Eine Person wählt die Berechtigungen eines in der App
erstellten Tokens selbst. Der erste Token eines Maschinenkontos hat nur
transcripts:read, transcripts:write, transcribe, account:read,
export, billing und die separate Berechtigung pat:rotate zur
Selbstrotation. Die Kontoaktivierung schaltet beide Abrechnungsschalter ein;
bei einem von einer Person erstellten Token müssen sie bewusst eingeschaltet
werden. Wenn die Berechtigungen bekannt sind, bietet der Server die passenden
Tools an; das Backend prüft sie bei jedem Aufruf.
| Berechtigung | Was sie erlaubt |
|---|---|
transcripts:read |
Transkripte, ihre Metadaten und die Liste gelöschter Transkripte lesen und exportieren |
transcripts:write |
Transkripte bearbeiten, taggen, übersetzen, wiederherstellen und löschen |
transcribe |
Aufnahmen hochladen, per Link importieren und Transkriptionen starten |
insights |
Insights lesen, erstellen und löschen |
context |
Gespeicherte Wörterbücher und Prompt-Vorlagen verwalten |
account:read |
Guthaben, Nutzung, Transaktionen und Reservierungen lesen |
settings:write |
Kontoeinstellungen ändern |
org:read |
Workspace-Mitglieder, Journal, Rechnungen und Prüfprotokoll lesen |
org:write |
Mitgliedsrechte ändern, rechtliche Sperren setzen und aufheben und den Wechsel zur (dauerhaften) Firmenverwahrung planen |
export |
Einen vollständigen Kontoexport anfordern, seinen Status prüfen und ihn herunterladen |
billing |
Zahlungsmethoden speichern oder verwalten und Minutenpakete kaufen |
billing ist in jeder Hinsicht die Ausnahme. Sie wird nie implizit gewährt,
der Zustimmungsbildschirm warnt Sie vor der Genehmigung, und ein Kauf-Tool
benötigt sowohl den Abrechnungsschalter des Tokens als auch den des Kontos.
pat:rotate lässt sich weder in einer OAuth-Anfrage noch im Tokenformular
der App auswählen.
Was die Tools abdecken
56 Tools, gruppiert nach dem, worauf sie zugreifen:
| Gruppe | Tools | Beispiele |
|---|---|---|
| Transkripte, Lesen | 4 | list_transcripts, get_transcript, list_deleted |
| Transkripte, Schreiben | 10 | update_body, revert_body, retranslate, tag_transcripts |
| Transkribieren | 8 | create_upload, transcribe_from_url, list_jobs, cancel_job |
| Konto | 6 | get_balance, get_usage, list_transactions |
| Insights | 3 | get_insights, generate_insights, delete_insights |
| Export | 4 | export_transcript, request_account_export |
| Transkriptionskontext | 5 | save_dictionary, save_prompt_preset |
| Workspace | 10 | get_org, list_org_members, get_org_audit_log, place_transcript_hold |
| Abrechnung | 6 | list_packs, purchase_pack, list_payment_methods, add_payment_method |
export_transcript liefert TXT, SRT, VTT, Markdown oder JSON. Der
vollständige Satz von 21 Exportformaten befindet sich in der App.
Neben den Tools veröffentlicht der Server beim Verbinden drei Ressourcen und
einen instructions-String: die Minutenpakete, das Guthaben- und
Berechtigungsmodell sowie den vollständigen Fehlercode-Katalog, damit ein
Client die Regeln lesen kann, bevor er etwas aufruft. Paginierte Listen-Tools
nehmen ein limit und einen opaken cursor aus dem next_cursor der
vorherigen Seite entgegen. list_packs und list_payment_methods liefern
ihre Listen ohne Cursor.
MCP-Uploads senden vorbereitete Audiodateien. Bei einem lokalen Video bereiten
Sie die Audiospur zuerst auf Ihrem Gerät vor. transcribe_from_url ruft
unterstützte Audio-Links serverseitig ab und importiert keine Video-Links.
Über MCP gestartete Jobs verwenden den Standardmodus: Ihre Transkripte
werden gemäß der Aufbewahrungseinstellung des Kontos gespeichert. Der
einmalige private Modus ist in der App verfügbar, nicht über MCP-Token.
Beispiele
Ein Client, der den OAuth-Flow durchläuft, erhält eine normale MCP-Sitzung und sieht davon nichts direkt: Sein SDK baut das JSON-RPC im Hintergrund auf. Es ist dasselbe Protokoll, das ein Client mit Token von Hand senden kann, und dient in beiden Fällen als Debugging-Hilfe.
Verbinden Sie sich mit einem Token, indem Sie ihn direkt in die Anfrage
einsetzen, ohne Handshake über initialize hinaus:
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" }
}
}'
Senden Sie dieselbe Anfrage erneut mit einem anderen Body, um alle Tools zu sehen, die die Berechtigungen des Tokens abdecken:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}
Jeder Eintrag trägt einen Namen, eine Beschreibung und ein JSON-Schema
inputSchema, passend zu den Gruppen oben. Ein Tool-Aufruf sieht so aus:
create_upload reserviert Guthaben und startet einen Upload:
{
"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 }
}
}
}
Strukturierte Tools wie create_upload liefern einen content-Textblock
mit JSON als String. Zum Beispiel:
{
"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}"
}
]
}
Die Antwort oben zeigt die Upload-Felder. Die vollständige Antwort enthält
auch limits, funding und state. Laden Sie die Bytes zu diesen URLs hoch,
rufen Sie complete_upload mit dem ETag jedes Teils auf und fragen Sie
get_job ab, bis der Status done ist. Die strukturierten Beispiele unten
zeigen das innere JSON direkt, bereits geparst, und lassen die
{"jsonrpc":"2.0","id":...}-Hülle der Anfrage weg, da sie sich nie ändert:
Nur name und arguments variieren.
export_transcript liefert das gerenderte Format als Text,
download_account_export_chunk die Rohbytes als Base64-kodierten Text.
Parsen Sie den text eines Ergebnisses nur dann als JSON, wenn das Tool
strukturierte Daten liefert.
Transkripte auflisten und lesen:
{
"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 erstellen, beim ersten Aufruf für ein Transkript kostenlos. Dieses
Beispiel zeigt das Guthaben nach dem Start einer neuen Erstellung; reused
ist false:
{
"name": "generate_insights",
"arguments": { "id": "t_9c2b7f10" }
}
{
"ok": true,
"reused": false,
"balance_seconds": 5400,
"held_seconds": 0
}
Minuten kaufen, idempotency_key ist erforderlich, damit ein
Wiederholungsversuch nach einer verlorenen Antwort keine Doppelbelastung
verursacht:
{
"name": "purchase_pack",
"arguments": {
"pack": "300min",
"payment_method_id": "pm_1PxYzABC",
"idempotency_key": "agent-2026-09-11-refill-01"
}
}
{
"status": "ok",
"balance_seconds": 23400
}
Ressourcen antworten ohne Tool-Aufruf, resources/read nennt eine der drei
URIs:
{
"jsonrpc": "2.0",
"id": 9,
"method": "resources/read",
"params": { "uri": "hushscript://pricing" }
}
Gekürzte Antwort (der erläuternde Hinweis der Ressource wurde weggelassen):
{
"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}]}"
}
]
}
Aktuelle Paketpreise und Währungen liefert list_packs.
Jeder Backend-Fehler trägt einen stabilen Slug und einen numerischen Code,
denselben {"error": "<slug>", "code": <number>}-Body, der unter
hushscript://error-codes dokumentiert ist. Ein Tool-Aufruf zeigt denselben
Slug und Code, eingebettet in eine lesbare Meldung statt eines rohen
Fehlerobjekts, und markiert das Ergebnis mit isError, statt eine Exception
zu werfen:
{
"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
}
Was Minuten kostet
Das Lesen von Kontodaten verbraucht keine Transkriptionsminuten. Kostenpflichtige Aktionen verwenden dieselben Sätze wie die App. Normalerweise werden sie aus persönlichen vorausbezahlten Minuten finanziert. Eine Workspace-Transkription kann einen Teams-Pool nutzen, wenn der aktive Pool allein den gesamten Job abdeckt und kein Übersetzungsziel ausgewählt ist. Ein Job mit Übersetzungszielen oder einer importierten Audio-URL verwendet persönliche Minuten. Die Finanzierung ändert die Transkriptverwahrung nicht.
Berechtigte persönliche Konten erhalten nach der Kartenverifizierung 30 kostenlose Minuten. Ein Maschinenkonto startet mit dem bei der Registrierung gekauften Paket.
- Transkribieren einer Aufnahme verbraucht Minuten nach ihrer Länge. Der medizinische Modus fügt 100 % hinzu, und jedes Übersetzungsziel fügt 25 % hinzu. Bei aktiviertem Mehrkanal wird jeder Audiokanal einzeln abgerechnet, eine Stereodatei zählt also doppelt.
- Insights: Die erste Erstellung pro Transkript ist kostenlos. Eine spätere Neuerstellung kostet 40 % der Aufnahmelänge, ausgehend vom Original, oder 30 % ausgehend von der bereinigten Version. Sie verwendet die persönlichen Minuten des Mitglieds, auch wenn ein Workspace-Pool die Transkription bezahlt hat.
- Erneutes Übersetzen eines Transkripts kostet 25 % seiner Länge pro Sprache. Dabei werden für jede Sprache, die der Aufruf berechnet, alle manuell bearbeiteten Kopien der Übersetzung unwiederbringlich überschrieben.
purchase_packbelastet bei Erfolg sofort eine berechtigte gespeicherte Karte. Dafür sind die Berechtigungbilling, der Abrechnungsschalter des Tokens und der kontoweite Abrechnungsschalter erforderlich. Der Kauf fügt Minuten zum persönlichen Guthaben hinzu, nicht zu einem Teams-Pool.add_payment_methodkostet nichts. Es liefert einen Stripe-Checkout-Link, der eine Karte im Konto speichert, ohne sie zu belasten. Schließen Sie ihn einmal im Browser ab (ein Agent darf seinen eigenen steuern). Später versuchtpurchase_packeine Off-Session-Belastung. Eine Ablehnung oder die Anforderung einer zusätzlichen Authentifizierung durch den Kartenaussteller liefert einen eigenen Fehlercode statt einer nicht abgeschlossenen Seite.
Die Pakete selbst finden Sie unter Preise.
Überprüfen und trennen
Bei einem Konto, an dem Sie sich anmelden können, erscheinen OAuth-Verbindungen unter Verbundene Apps auf der MCP-Seite in Ihrem Konto, mit dem jeweiligen Client und seinen Berechtigungen. Dort werden auch Token aufgelistet; ein Widerruf unterbindet ihre Aufrufe. Das Entfernen einer Client-Konfiguration verhindert nur Anfragen dieses Clients. Ein Maschinenkonto hat kein nutzbares Postfach zur Anmeldung; sein Token rotiert sich stattdessen selbst über den Ablauf für Agenten-Konten.
Limits
Token menschlicher Konten erlauben jeweils 1.200 Anfragen pro Minute.
Die Token-Nachfolger eines Agenten-Kontos teilen sich dieses Budget auch
über Rotationen hinweg. Über Token aufgerufene Abrechnungsrouten, die Stripe
aufrufen, teilen sich 60 Anfragen pro Minute und Konto: Karteneinrichtung,
Kauf, Wechsel der Standardkarte, Entfernen einer Karte und Cache-Fehlzugriffe
der Kartenliste. Käufe von Agenten-Konten und Token-Käufe menschlicher
Konten sind auf drei Versuche pro rollierenden 24 Stunden und Konto begrenzt.
Die bezahlte Agenten-Registrierung zählt mit, ebenso Fehler nach der
Reservierung eines Versuchs. Käufe über menschliche Browser-Sitzungen sind
ausgenommen. Eine Ablehnung wegen dieses Limits liefert HTTP 429 / Code 4038
agent_purchase_capped, anders als die normale Drosselung mit HTTP 429 /
Code 5000 rate_limited. Beide liefern Retry-After.
OAuth-Autorisierung und -Abschluss teilen sich ein adressbezogenes Limit von
30 Anfragen pro Minute. Die Registrierung hat ein eigenes Limit von
30 Anfragen pro Minute; /oauth/token ein separates Limit von 600 pro Minute.
Als Schlüssel dient jeweils eine IPv4-Adresse oder ein IPv6-/64-Netz.
Cache-Fehlzugriffe bei der Introspektion direkter Token haben ein weiteres
Limit von 30 Anfragen pro Minute mit demselben Schlüssel. Dieses Limit gilt
nicht für jeden MCP-Tool-Aufruf.