Aller au contenu principal

Développeurs

Serveur MCP de transcription pour votre compte

Connectez le serveur MCP de transcription à votre compte Hushscript pour travailler sur vos enregistrements et transcriptions avec les outils d'un assistant aux permissions définies.

Le serveur MCP Hushscript connecte un assistant à vos enregistrements et transcriptions via le Model Context Protocol. Approuvez une connexion OAuth dans votre navigateur ou fournissez un jeton d’accès personnel. La transcription et les actions payantes suivent les règles de financement de votre compte personnel ou de votre espace de travail éligible.

Deux serveurs

Hushscript exploite deux serveurs MCP distincts, et la plupart des lecteurs n’ont besoin que d’un seul.

https://mcp.hushscript.com/mcp est le serveur de compte que décrit le reste de cette page. Il accepte OAuth ou un jeton d’accès personnel, et permet les actions sur le compte : téléverser, transcrire, modifier, exporter.

POST https://hushscript.com/mcp est un serveur de documentation gratuit et distinct. Pas de compte, pas de jeton, aucune connexion nécessaire. Il est en lecture seule et anonyme : il ne peut pas ouvrir de compte, lancer une transcription, ni toucher à quoi que ce soit appartenant à un compte. Il répond aux questions sur les tarifs, les capacités, le contenu des pages et la façon de se connecter, via cinq outils (get_pricing, get_capabilities, how_to_connect, list_pages, get_page) et les mêmes informations sous forme de trois ressources (hushscript://pricing, hushscript://capabilities, hushscript://connect).

Si vous êtes un agent qui vient de découvrir Hushscript, que vous ne détenez aucun jeton, et que vous décidez encore si le produit vous convient avant de dépenser quoi que ce soit, commencez par le serveur de documentation. Revenez au reste de cette page une fois prêt à connecter un compte.

Se connecter

Le serveur utilise Streamable HTTP sur un point de terminaison unique :

https://mcp.hushscript.com/mcp

Il n’y a pas de point de terminaison SSE, et aucun logiciel Hushscript à installer localement. Dans Claude Code :

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

Dans un client qui accepte une configuration JSON :

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

Un client compatible OAuth lit /.well-known/oauth-authorization-server pour découvrir les points de terminaison. Il peut s’enregistrer via /oauth/register ou utiliser un document de métadonnées d’identifiant client, puis ouvre une fenêtre de navigateur pour la connexion.

Ce que vous approuvez

L’autorisation repose sur OAuth 2.1 avec PKCE. La fenêtre de navigateur est un écran de consentement Hushscript, pas un champ de mot de passe pour le client : elle nomme l’application qui fait la demande, énumère en langage clair ce qu’elle veut faire, et attend votre décision. Rien n’est accordé tant que vous ne l’avez pas approuvé là.

Les jetons d’accès sont valables une heure et les jetons de renouvellement, trente jours. Avec OAuth, votre client gère ces identifiants pour vous ; vous ne collez jamais de jeton d’accès personnel dans la configuration.

Sans navigateur

Une connexion OAuth nécessite une approbation dans le navigateur. Le même serveur accepte aussi directement un jeton d’accès personnel, sans étape de navigateur au moment de la connexion. Une personne en crée un sous Tokens sur la page MCP du compte, choisit ses scopes et décide s’il peut acheter des minutes. Le jeton est affiché une seule fois, ressemble à hsr1:<region>:pat.<id>.<secret> et se place dans Authorization: Bearer <token> à chaque requête : pas d’aller-retour OAuth, pas d’écran de consentement, pas d’enregistrement de client. Le même jeton fonctionne avec l’API REST.

Un jeton peut aussi appartenir à un compte machine sans titulaire humain. Un agent démarre une inscription payante avec POST /v1/agent/accounts, termine la page Stripe Checkout hébergée dans un navigateur qu’il peut piloter et récupère le compte avec un secret à usage unique via POST /v1/agent/accounts/{signup_id}/claim pour obtenir son premier jeton. Ce jeton se connecte ici comme n’importe quel autre. Voir Transcription automatique pour agents et scripts pour le parcours complet.

Un jeton ne peut pas créer, lister ni révoquer d’autres jetons. Un compte peut détenir au maximum 25 jetons actifs. Le premier jeton du compte machine peut effectuer sa propre rotation via l’API REST ; le parcours est décrit dans Transcription automatique pour agents et scripts.

Permissions

Une connexion dispose d’un ensemble de scopes. Une demande OAuth qui n’en précise aucun reçoit par défaut dix des onze scopes sélectionnables par l’appelant, tous sauf billing. Une personne choisit les scopes d’un jeton créé dans l’application. Le premier jeton d’un compte machine dispose uniquement de transcripts:read, transcripts:write, transcribe, account:read, export, billing et du scope distinct pat:rotate pour sa propre rotation. La récupération du compte active les deux réglages de facturation ; un jeton créé par une personne nécessite leur activation explicite. Lorsque les scopes sont connus, le serveur annonce les outils correspondants ; le backend les vérifie à chaque appel.

Scope Autorisations
transcripts:read Lire et exporter les transcriptions, leurs métadonnées et la liste des éléments supprimés
transcripts:write Modifier, étiqueter, traduire, restaurer et supprimer des transcriptions
transcribe Téléverser des enregistrements, importer depuis un lien et lancer des transcriptions
insights Lire, générer et supprimer des Insights
context Gérer les dictionnaires enregistrés et les modèles d’invite
account:read Lire le solde, l’utilisation, les transactions et les réservations
settings:write Modifier les paramètres du compte
org:read Lire les membres de l’espace de travail, le registre, les factures et le journal d’audit
org:write Modifier les droits des membres, placer et lever une conservation légale, et planifier le passage à la garde de l’organisation (permanente)
export Demander un export complet du compte, vérifier son statut et le télécharger
billing Enregistrer ou gérer des moyens de paiement et acheter des packs de minutes

billing fait exception dans tous les cas. Il n’est jamais accordé implicitement, l’écran de consentement vous avertit avant que vous ne l’approuviez, et un outil d’achat nécessite l’activation de la facturation sur le jeton et sur le compte. pat:rotate ne peut pas être sélectionné dans une demande OAuth ni dans le formulaire de création de jeton de l’application.

Ce que couvrent les outils

56 outils, regroupés selon ce qu’ils touchent :

Groupe Outils Exemples
Transcriptions, lecture 4 list_transcripts, get_transcript, list_deleted
Transcriptions, écriture 10 update_body, revert_body, retranslate, tag_transcripts
Transcription 8 create_upload, transcribe_from_url, list_jobs, cancel_job
Compte 6 get_balance, get_usage, list_transactions
Insights 3 get_insights, generate_insights, delete_insights
Export 4 export_transcript, request_account_export
Contexte de transcription 5 save_dictionary, save_prompt_preset
Espace de travail 10 get_org, list_org_members, get_org_audit_log, place_transcript_hold
Facturation 6 list_packs, purchase_pack, list_payment_methods, add_payment_method

export_transcript renvoie TXT, SRT, VTT, Markdown ou JSON. L’ensemble complet des 21 formats d’export se trouve dans l’application.

En plus des outils, le serveur publie trois ressources et une chaîne instructions à la connexion : les packs de minutes, le modèle de crédits et de scopes et le catalogue complet des codes d’erreur. Un client peut ainsi lire les règles avant tout appel. Les outils de liste paginés acceptent un limit et un cursor opaque tiré du next_cursor de la page précédente ; list_packs et list_payment_methods renvoient leurs listes sans curseur.

Les téléversements MCP envoient de l’audio préparé. Pour une vidéo locale, préparez d’abord l’audio sur votre appareil ; transcribe_from_url récupère les liens audio pris en charge côté serveur et n’importe pas de liens vidéo. Les tâches lancées via MCP utilisent le mode standard : leurs transcriptions sont enregistrées selon la durée de conservation du compte. Le mode privé ponctuel est disponible dans l’application, pas via les jetons MCP.

Exemples

Un client qui effectue le flux OAuth obtient une session MCP normale et ne voit jamais rien de cela directement : son SDK construit le JSON-RPC en coulisses. C’est le même protocole qu’un client muni d’un jeton envoie à la main, et cela sert d’aide au débogage dans les deux cas.

Connectez-vous avec un jeton en le plaçant directement sur la requête, sans autre prise de contact que 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" }
    }
  }'

Envoyez à nouveau la même requête avec un corps différent pour voir tous les outils que couvrent les scopes du jeton :

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

Chaque entrée porte un nom, une description et un inputSchema au format JSON Schema, correspondant aux groupes ci-dessus. Appeler un outil ressemble à ceci, create_upload réservant du crédit et démarrant un téléversement :

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

Les outils structurés comme create_upload renvoient un bloc de texte content contenant du JSON sous forme de chaîne. Par exemple :

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

La réponse ci-dessus montre les champs du téléversement ; la réponse complète comprend aussi limits, funding et state. Téléversez les octets sur ces URL, appelez complete_upload avec l’ETag de chaque partie, puis interrogez get_job jusqu’à ce que son état soit done. Les exemples ci-dessous montrent directement ce JSON interne, déjà analysé, et omettent l’enveloppe {"jsonrpc":"2.0","id":...} autour de la requête puisqu’elle ne change jamais : seuls name et arguments varient.

export_transcript renvoie le format rendu sous forme de texte, et download_account_export_chunk renvoie les octets bruts encodés en base64. Analysez le text d’un résultat comme du JSON uniquement lorsque l’outil renvoie des données structurées.

Lister et lire des transcriptions :

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

Générer Insights, gratuitement lors du premier appel pour une transcription. Cet exemple montre le solde après le début d’une nouvelle génération ; reused vaut false :

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

Acheter des minutes, idempotency_key est obligatoire afin qu’une nouvelle tentative après une réponse perdue ne puisse pas facturer deux fois :

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

Les ressources répondent sans appel d’outil, resources/read nommant l’une des trois URI :

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

Réponse abrégée (la note explicative de la ressource est omise) :

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

Utilisez list_packs pour connaître les montants et les devises actuels des packs.

Chaque échec côté serveur porte un slug stable et un code numérique, le même corps {"error": "<slug>", "code": <number>} documenté dans hushscript://error-codes. Un appel d’outil fait remonter ce même slug et ce même code, intégrés dans un message lisible plutôt que dans un objet d’erreur brut, et signale le résultat avec isError plutôt que de lever une exception :

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

Ce qui consomme des minutes

Lire les données du compte ne consomme pas de minutes de transcription. Les actions facturées suivent les mêmes tarifs que dans l’application. Elles utilisent généralement les minutes personnelles prépayées ; une transcription d’espace de travail peut utiliser une réserve Teams si la réserve active couvre à elle seule toute la tâche et qu’aucune langue de traduction cible n’est sélectionnée. Une tâche avec des langues de traduction cibles ou une URL audio importée utilise des minutes personnelles. Le financement ne change pas la garde des transcriptions.

Les comptes personnels éligibles reçoivent 30 minutes gratuites après vérification de carte ; un compte machine commence avec le pack acheté à l’inscription.

Voir tarifs pour les packs eux-mêmes.

Consulter et révoquer

Pour un compte auquel vous pouvez vous connecter, les connexions OAuth apparaissent sous Applications connectées sur la page MCP de votre compte, avec leur client et leurs scopes. Les jetons y sont aussi listés ; en révoquer un interrompt ses appels. Supprimer la configuration d’un client empêche uniquement ce client d’envoyer des requêtes. Un compte machine ne dispose pas d’une boîte e-mail de connexion utilisable ; son jeton effectue sa propre rotation via le parcours de compte d’agent.

Limites

Les jetons de comptes humains autorisent chacun 1 200 requêtes par minute. Les jetons successifs d’un compte d’agent partagent ce budget à travers les rotations. Les routes de facturation qui appellent Stripe via un jeton partagent une limite de 60 requêtes par minute et par compte : configuration de carte, achat, changement de carte par défaut, suppression de carte et requêtes de liste des cartes non servies par le cache. Les achats de comptes d’agents et les achats avec un jeton de compte humain sont plafonnés à trois tentatives par période glissante de 24 heures et par compte. L’inscription payante de l’agent compte, tout comme les échecs après réservation d’une tentative ; les achats humains depuis une session de navigateur en sont exemptés. Un refus dû au plafond renvoie HTTP 429 / code 4038 agent_purchase_capped, distinct de la limitation ordinaire HTTP 429 / code 5000 rate_limited. Les deux fournissent Retry-After.

L’autorisation OAuth et sa finalisation partagent une limite de 30 requêtes par minute et par adresse. L’enregistrement a sa propre limite de 30 par minute ; /oauth/token a une limite distincte de 600 par minute. Chacune utilise une adresse IPv4 ou un préfixe IPv6 /64 comme clé. Les requêtes de validation de jetons bruts non servies par le cache ont une autre limite de 30 par minute sur la même clé ; elle ne s’applique pas à chaque appel d’outil MCP.

Commencer à transcrire avec 30 minutes gratuites

Prévisualisez jusqu'à 5 minutes avant de créer un compte, et un nouveau compte personnel bénéficie d'un aperçu gratuit de son premier téléversement dans l'application. La transcription complète nécessite un compte et des minutes ; les comptes personnels éligibles reçoivent 30 minutes gratuites une seule fois, après une vérification de carte ou avec un premier achat. Sans abonnement.

Commencer avec 30 minutes gratuites