El servidor MCP de Hushscript conecta un asistente con tus grabaciones y transcripciones mediante el Model Context Protocol. Aprueba una conexión OAuth en tu navegador, o proporciona un token de acceso personal. La transcripción y las acciones de pago siguen las reglas de financiamiento de tu cuenta personal o del espacio de trabajo elegible.
Dos servidores
Hushscript tiene en realidad dos servidores MCP independientes, y la mayoría de los lectores solo necesitan uno.
https://mcp.hushscript.com/mcp es el servidor de cuenta que describe el
resto de esta página. Acepta OAuth o un token de acceso personal, y es donde
ocurre el trabajo de la cuenta: subir, transcribir, editar, exportar.
POST https://hushscript.com/mcp es un servidor de documentación gratuito
aparte. Sin cuenta, sin token, sin nada a lo que iniciar sesión. Es de solo
lectura y anónimo: no puede abrir una cuenta, ejecutar una transcripción, ni
tocar nada que pertenezca a una. Responde preguntas sobre precios,
capacidades, contenido de las páginas y cómo conectarse, mediante cinco
herramientas (get_pricing, get_capabilities, how_to_connect,
list_pages, get_page) y la misma información como tres recursos
(hushscript://pricing, hushscript://capabilities,
hushscript://connect).
Si eres un agente que acaba de encontrar Hushscript, no tienes ningún token, y todavía estás decidiendo si te conviene antes de gastar algo, empieza por el servidor de documentación. Vuelve al resto de esta página cuando estés listo para conectar una cuenta.
Conéctate
El servidor habla Streamable HTTP en un solo endpoint:
https://mcp.hushscript.com/mcp
No hay ningún endpoint SSE ni software de Hushscript que instalar localmente. En Claude Code:
claude mcp add --transport http hushscript https://mcp.hushscript.com/mcp
En un cliente que acepta configuración JSON:
{
"mcpServers": {
"hushscript": {
"type": "http",
"url": "https://mcp.hushscript.com/mcp"
}
}
}
Un cliente compatible con OAuth lee /.well-known/oauth-authorization-server
para conocer los endpoints. Puede registrarse mediante /oauth/register o
usar un documento de metadatos de ID de cliente, y luego abre una ventana del
navegador para que inicies sesión.
Lo que apruebas
La autorización es OAuth 2.1 con PKCE. La ventana del navegador es una pantalla de consentimiento de Hushscript, no un cuadro de contraseña para el cliente: nombra la aplicación que solicita acceso, enumera en lenguaje sencillo lo que quiere hacer, y espera tu decisión. No se concede nada hasta que lo apruebas ahí.
Los tokens de acceso duran una hora y los tokens de renovación, treinta días. Con OAuth, tu cliente maneja esas credenciales por ti; nunca pegas un token de acceso personal en la configuración.
Sin navegador
Una conexión OAuth requiere aprobación en el navegador. El mismo servidor
también acepta un token de acceso personal directamente, sin ningún paso de
navegador al conectar. Una persona crea uno en Tokens, en la
página de MCP de la cuenta,
elige sus scopes, y decide si puede comprar minutos. El token se muestra una
sola vez, tiene la forma hsr1:<region>:pat.<id>.<secret>, y va en
Authorization: Bearer <token> en cada solicitud: sin intercambio OAuth, sin
pantalla de consentimiento, sin registro de cliente. El mismo token funciona
con la API REST.
Un token también puede pertenecer a una cuenta de máquina sin ninguna persona
titular. Un agente inicia un registro pagado con POST /v1/agent/accounts,
completa el Checkout alojado de Stripe en un navegador que puede manejar, y
reclama la cuenta con un secreto de un solo uso en
POST /v1/agent/accounts/{signup_id}/claim para obtener su primer token. Ese
token se conecta aquí exactamente igual que cualquier otro. Consulta
Uso automatizado para ver el flujo completo de principio a fin.
Un token no puede crear, listar ni revocar otros tokens. Una cuenta tiene como máximo 25 tokens activos. El primer token de la cuenta de máquina puede rotarse a sí mismo mediante la API REST; el flujo está en Uso automatizado.
Permisos
Una conexión mantiene un conjunto de scopes. Una solicitud OAuth que no nombra
ninguno usa por defecto diez de los once scopes que puede elegir quien llama,
todos excepto billing. Una persona elige los scopes de un token creado en la
aplicación. El primer token de una cuenta de máquina solo tiene
transcripts:read, transcripts:write, transcribe, account:read,
export, billing y el scope aparte pat:rotate para la autorrotación. Su
reclamo activa ambos interruptores de facturación; un token creado por una
persona necesita que se activen a propósito. Cuando se conocen los scopes, el
servidor anuncia las herramientas correspondientes; el backend los aplica en
cada llamada.
| Scope | Qué permite |
|---|---|
transcripts:read |
Lee y exporta las transcripciones, sus metadatos y la lista de eliminadas |
transcripts:write |
Edita, etiqueta, traduce, restaura y elimina transcripciones |
transcribe |
Sube grabaciones, importa desde un enlace e inicia transcripciones |
insights |
Lee, genera y elimina Insights |
context |
Administra diccionarios guardados y preajustes de indicaciones |
account:read |
Lee el saldo, el uso, las transacciones y las retenciones |
settings:write |
Cambia la configuración de la cuenta |
org:read |
Lee los miembros, el historial de movimientos, las facturas y el registro de auditoría del espacio de trabajo |
org:write |
Cambia los permisos de los miembros, impone y levanta retenciones legales, y programa el paso a la custodia corporativa (permanente) |
export |
Solicita una exportación completa de la cuenta, consulta su estado y la descarga |
billing |
Guarda o administra métodos de pago y compra paquetes de minutos |
billing es la excepción en todos los sentidos. Nunca se concede de forma
implícita, la pantalla de consentimiento te advierte antes de que la apruebes,
y una herramienta de compra necesita que estén activados tanto el indicador de
facturación del token como el interruptor de facturación de toda la cuenta.
pat:rotate no se puede seleccionar en una solicitud OAuth ni en el
formulario de tokens de la aplicación.
Lo que cubren las herramientas
56 herramientas, agrupadas según lo que tocan:
| Grupo | Herramientas | Ejemplos |
|---|---|---|
| Transcripciones, lectura | 4 | list_transcripts, get_transcript, list_deleted |
| Transcripciones, escritura | 10 | update_body, revert_body, retranslate, tag_transcripts |
| Transcribir | 8 | create_upload, transcribe_from_url, list_jobs, cancel_job |
| Cuenta | 6 | get_balance, get_usage, list_transactions |
| Insights | 3 | get_insights, generate_insights, delete_insights |
| Exportación | 4 | export_transcript, request_account_export |
| Contexto de transcripción | 5 | save_dictionary, save_prompt_preset |
| Espacio de trabajo | 10 | get_org, list_org_members, get_org_audit_log, place_transcript_hold |
| Facturación | 6 | list_packs, purchase_pack, list_payment_methods, add_payment_method |
export_transcript devuelve TXT, SRT, VTT, Markdown o JSON. El conjunto
completo de 21 formatos de exportación está en la aplicación.
Además de las herramientas, el servidor publica tres recursos y una cadena
instructions al conectar: los paquetes de minutos, el modelo de créditos y
scopes, y el catálogo completo de códigos de error, para que un cliente
pueda leer las reglas antes de llamar a nada. Las herramientas de listado
paginadas toman un limit y un cursor opaco del next_cursor de la página
anterior; list_packs y list_payment_methods devuelven sus listas sin
cursor.
Las subidas por MCP envían audio ya preparado. Para un video local, prepara
primero su audio en tu dispositivo; transcribe_from_url obtiene enlaces de
audio compatibles desde el servidor y no importa enlaces de video. Los jobs
iniciados por MCP usan el modo estándar: sus transcripciones se guardan según
la configuración de retención de la cuenta. El modo privado de un solo uso
está disponible en la aplicación, no mediante tokens MCP.
Ejemplos
Un cliente que hace el flujo OAuth obtiene una sesión MCP normal y nunca ve nada de esto directamente: su SDK arma el JSON-RPC por debajo. Este es el mismo protocolo que un cliente con token envía a mano, y sirve como ayuda para depurar en cualquiera de los dos casos.
Conéctate con un token poniéndolo directamente en la solicitud, sin más
protocolo de enlace 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" }
}
}'
Envía la misma solicitud otra vez con un cuerpo distinto para ver todas las herramientas que cubren los scopes del token:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}
Cada entrada trae un nombre, una descripción y un inputSchema en JSON
Schema, que corresponde a los grupos de arriba. Llamar a una herramienta se
ve así, create_upload reservando crédito e iniciando una subida:
{
"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 }
}
}
}
Las herramientas estructuradas como create_upload devuelven un bloque
content de texto con JSON convertido a cadena. Por ejemplo:
{
"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 respuesta de arriba muestra los campos de la subida; la respuesta completa
incluye además limits, funding y state. Sube los bytes a esas URLs,
llama a complete_upload con el ETag de cada parte, y luego consulta
get_job hasta que su estado sea done. Los ejemplos estructurados de abajo
muestran ese JSON interno directamente, ya interpretado, y omiten el
envoltorio {"jsonrpc":"2.0","id":...} alrededor de la solicitud porque
nunca cambia: solo cambian name y arguments.
export_transcript devuelve el formato generado como texto, y
download_account_export_chunk devuelve bytes sin procesar codificados como
texto base64. Interpreta el text de un resultado como JSON solo cuando la
herramienta devuelve datos estructurados.
Listar y leer transcripciones:
{
"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
}
Generar Insights, gratis en la primera llamada para una transcripción. Este
ejemplo muestra el saldo cuando empieza una generación nueva; reused es
false:
{
"name": "generate_insights",
"arguments": { "id": "t_9c2b7f10" }
}
{
"ok": true,
"reused": false,
"balance_seconds": 5400,
"held_seconds": 0
}
Comprar minutos, con idempotency_key obligatorio para que un reintento
tras una respuesta perdida no pueda cobrar dos veces:
{
"name": "purchase_pack",
"arguments": {
"pack": "300min",
"payment_method_id": "pm_1PxYzABC",
"idempotency_key": "agent-2026-09-11-refill-01"
}
}
{
"status": "ok",
"balance_seconds": 23400
}
Los recursos responden sin llamar a una herramienta, resources/read
nombrando una de las tres URIs:
{
"jsonrpc": "2.0",
"id": 9,
"method": "resources/read",
"params": { "uri": "hushscript://pricing" }
}
Respuesta abreviada (se omite la nota explicativa del recurso):
{
"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}]}"
}
]
}
Usa list_packs para ver los montos y monedas vigentes de los paquetes.
Todo fallo del backend lleva un slug estable y un código numérico, el
mismo cuerpo {"error": "<slug>", "code": <number>} documentado en
hushscript://error-codes. Una llamada a una herramienta muestra ese mismo
slug y código, convertido en un mensaje legible en lugar de un objeto de
error crudo, y marca el resultado con isError en vez de lanzar una
excepción:
{
"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
}
Qué consume minutos
Leer datos de la cuenta no gasta minutos de transcripción. Las acciones con costo usan las mismas tarifas que la aplicación. Por lo general las cubren los minutos prepagados personales; una transcripción de un espacio de trabajo puede usar un fondo de Teams cuando el fondo activo por sí solo cubre todo el job y no hay ningún idioma de traducción seleccionado. Un job con idiomas de traducción o con una URL de audio importada usa minutos personales. El financiamiento no cambia la custodia de la transcripción.
Las cuentas personales elegibles reciben 30 minutos gratis tras la verificación de la tarjeta; una cuenta de máquina empieza con el paquete que compra al registrarse.
- Transcribir una grabación gasta minutos según su duración. El modo médico suma un 100 %, y cada idioma de traducción suma un 25 %. Con multicanal activado, cada canal de audio se factura por separado, así que un archivo estéreo cuenta el doble.
- Insights: la primera generación por transcripción es gratis. Regenerarla después cuesta un 40 % de la duración de la grabación desde la transcripción original, o un 30 % desde una versión limpia. La regeneración usa los minutos personales del miembro, aunque un fondo del espacio de trabajo haya pagado la transcripción.
- Volver a traducir una transcripción cuesta un 25 % de su duración por idioma, y sobrescribe: cada idioma que cobra la llamada pierde cualquier copia editada a mano de esa traducción, sin forma de recuperarla.
purchase_packcobra de inmediato una tarjeta guardada elegible cuando tiene éxito. Necesita el scopebilling, el indicador de facturación del propio token y el interruptor de facturación de toda la cuenta. Suma minutos al saldo personal, no a un fondo de Teams.add_payment_methodno cuesta nada. Devuelve un enlace de Stripe Checkout que guarda una tarjeta en la cuenta sin cobrarla; complétalo una vez en un navegador (un agente puede manejar el suyo propio). Después,purchase_packintenta un cargo fuera de sesión; un rechazo, o una verificación que exige el emisor, devuelve un código de error distinto en lugar de una página sin terminar.
Consulta precios para ver los paquetes en sí.
Revisar y revocar
En una cuenta a la que puedes iniciar sesión, las conexiones OAuth aparecen bajo Aplicaciones conectadas en la página de MCP de tu cuenta, con su cliente y sus scopes. Los tokens también se listan ahí; revocar uno corta sus llamadas. Eliminar la configuración de un cliente solo evita que ese cliente vuelva a solicitar acceso. Una cuenta de máquina no tiene un buzón de inicio de sesión utilizable, así que su token se rota a sí mismo mediante el flujo de cuenta de agente.
Límites
Los tokens de cuentas humanas permiten 1,200 solicitudes por minuto cada uno.
Los tokens rotados de una cuenta de agente comparten ese presupuesto entre
rotaciones. Las rutas de facturación que llaman a Stripe y se alcanzan con un
token comparten 60 solicitudes por minuto por cuenta: configuración de
tarjeta, compra, cambios de tarjeta predeterminada, eliminación de tarjeta y
fallos de caché de la lista de tarjetas. Las compras de cuentas de agente y las
compras con token de cuentas humanas tienen un tope de tres intentos por cada
24 horas móviles por cuenta. La compra de registro del agente cuenta, igual
que los fallos posteriores a la reserva de un intento; las compras desde una
sesión de navegador humana están exentas. Un rechazo por el tope es HTTP 429 /
código 4038 agent_purchase_capped, distinto del HTTP 429 / código 5000
rate_limited ordinario. Ambos incluyen Retry-After.
La autorización y la finalización de OAuth comparten un cupo de 30 por minuto
por dirección. El registro tiene su propio cupo de 30 por minuto;
/oauth/token tiene un cupo aparte de 600 por minuto. Cada uno usa como clave
una dirección IPv4 o un /64 de IPv6. Los fallos de caché en la introspección
de tokens sin procesar tienen otro cupo de 30 por minuto con la misma clave;
eso no es un límite para cada llamada a una herramienta MCP.